{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Beyond Confounders\n",
    "\n",
    "\n",
    "## Good Controls\n",
    "\n",
    "We've seen how adding additional controls to our regression model can help identify causal effect. If the control is a confounder, adding it to the model is not just nice to have, but is a requirement. When the unwary see this, a natural response is to throw whatever he can measure into the model. In today's world of big data, this could easily be more than 1000 variables. As it turns out, this is not only unnecessary, but can be detrimental to causal identification. We will now turn our attention to controls that are not confounders. First, let's take a look at the good ones. Then, we will delve into harmful controls.\n",
    "\n",
    "As a motivating example, let's suppose you are a data scientist in the collections team of a fintech. Your next task is to figure out the impact of sending an email asking people to negotiate their debt. Your response variable is the amount of payments from the late customers.\n",
    "\n",
    "To answer this question, your team selects 5000 random customers from your late customers base to do a random test. For every customer, you flip a coin, if its heads, the customer receives the email; otherwise, it is left as a control. With this test, you hope to find out how much extra money the email generates."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from scipy import stats\n",
    "from matplotlib import style\n",
    "import seaborn as sns\n",
    "from matplotlib import pyplot as plt\n",
    "import statsmodels.formula.api as smf\n",
    "import graphviz as gr\n",
    "\n",
    "style.use(\"fivethirtyeight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>payments</th>\n",
       "      <th>email</th>\n",
       "      <th>opened</th>\n",
       "      <th>agreement</th>\n",
       "      <th>credit_limit</th>\n",
       "      <th>risk_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>740</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2348.495260</td>\n",
       "      <td>0.666752</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>580</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>334.111969</td>\n",
       "      <td>0.207395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>600</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1360.660722</td>\n",
       "      <td>0.550479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>770</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1531.828576</td>\n",
       "      <td>0.560488</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>660</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>979.855647</td>\n",
       "      <td>0.455140</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   payments  email  opened  agreement  credit_limit  risk_score\n",
       "0       740      1     1.0        0.0   2348.495260    0.666752\n",
       "1       580      1     1.0        1.0    334.111969    0.207395\n",
       "2       600      1     1.0        1.0   1360.660722    0.550479\n",
       "3       770      0     0.0        0.0   1531.828576    0.560488\n",
       "4       660      0     0.0        0.0    979.855647    0.455140"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"./data/collections_email.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since the data is random, you know that a simple difference in means estimates the Average Treatment Effect. In other words, nothing can have caused the treatment but the randomisation, so the potential outcomes are independent of the treatment: \\\\((Y_0, Y_1)\\perp T\\\\). \n",
    "\n",
    "$\n",
    "ATE = E[Y_i|T_i=1] - E[Y_i|T_i=1]\n",
    "$\n",
    "\n",
    "Since you are smart and want to place a confidence interval around your estimate, you use a linear regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Difference in means: -0.6202804021329484\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th> <td>  669.9764</td> <td>    2.061</td> <td>  325.116</td> <td> 0.000</td> <td>  665.937</td> <td>  674.016</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>email</th>     <td>   -0.6203</td> <td>    2.941</td> <td>   -0.211</td> <td> 0.833</td> <td>   -6.387</td> <td>    5.146</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Difference in means:\",\n",
    "      data.query(\"email==1\")[\"payments\"].mean() - data.query(\"email==0\")[\"payments\"].mean())\n",
    "\n",
    "model = smf.ols('payments ~ email', data=data).fit()\n",
    "model.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sadly, the estimated ATE is -0.62, which is pretty weird. How can sending an email make late customers pay less than average? Still, the P-value is so high that this probably doesn't mean anything. What you should do now? Go back to your team with a tail between your legs and say that the test is inconclusive and you need more data? Not so fast.\n",
    "\n",
    "Notice how your data has some other interesting columns. For example, `credit_limit` represents the customer's credit line prior to he or she getting late. `risk_score` corresponds to the estimated risk of the customer prior to the delivery of the email. It makes sense to think that credit limit and risk are probably very good predictors of payments. What is still not clear is how that can be useful?\n",
    "\n",
    "First, let's understand why we can fail to find statistical significance in a treatment even when it is there. It could be that, like in this case, the treatment has very little impact on the outcome. If you think about it, what makes people pay their debt is, by and large, factors outside the control of the collections department. People pay their debt because they find a new job, manage their finances, income and so on. In statistical terms, we can say that **the variability of payments is explained much more by other factors other than by the email**. \n",
    "\n",
    "To get a visual understanding of it, we can plot the payments against the treatment variable email. I've also plotted the fitted line of the model above in red. To help visualization, I've added a little bit of noise to the email variable so that it doesn't get smashed at the zero or one. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.scatterplot(\"email\", \"payments\", \n",
    "                alpha=0.8,\n",
    "                data=data.assign(email=data[\"email\"] + np.random.normal(0, 0.01, size=len(data[\"email\"]))))\n",
    "plt.plot(np.linspace(-0.2, 1.2), model.params[0] + np.linspace(-1, 2) * model.params[1], c=\"C1\")\n",
    "plt.xlabel(\"Email\")\n",
    "plt.ylabel(\"Payments\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see how wildly payments vary in a single treatment group. Visually, it looks like it is going from a little bit under 400 to 1000 in both groups. If the impact of the email is in the order of say 5.00 or 10.00 R$, it is no wonder it will be hard to find it inside all the variability.\n",
    "\n",
    "Fortunately, regression can help us lower this variability. The trick is to use additional controls. **If a variable is a good predictor of the outcome, it will explain away a lot of its variance**. If risk and credit limit are good predictors of payment, we can control them to make it easier to find the impact of the email on payments. If we remember how regression works, this has an intuitive explanation. Adding extra variables to a regression means keeping them constant while looking at the treatment. So, the reasoning goes, if we look at similar levels of risk and credit limit, the variance of the response variable `payments` should be smaller. Or, in other words, if risk and credit line predicts payments very well, customers with similar risk and credit line should also have similar payment levels, hence with less variance.\n",
    "\n",
    "![img](./data/img/beyond-conf/y-pred.png)\n",
    "\n",
    "To demonstrate this, let's resort to the partialling out way of breaking regression into 2 steps. First, we will regress the treatment, email, and the outcome, payments, on the additional controls, credit limit and risk score. Second, we will regress the residual of the treatment on the residuals of payments, both obtained in step 1. (This is purely pedagogical, in practice you won't need to go through all the hassle)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_email = smf.ols('email ~ credit_limit + risk_score', data=data).fit()\n",
    "model_payments = smf.ols('payments ~ credit_limit + risk_score', data=data).fit()\n",
    "\n",
    "residuals = pd.DataFrame(dict(res_payments=model_payments.resid, res_email=model_email.resid))\n",
    "\n",
    "model_treatment = smf.ols('res_payments ~ res_email', data=residuals).fit()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This lowers the variance of the dependent variable. By regressing payments on credit limit and risk and obtaining the residuals for this model, we are creating a new dependent variable with much less variability than the original one. The last model also uncovers the `ATE` with valid standard error estimate.\n",
    "\n",
    "Just out of curiosity, we can also check that the model that predicts the treatment should not be able to lower the variance of it. That's because email is, by design, random, so nothing can predict it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Payments Variance 10807.612416\n",
      "Payments Residual Variance 5652.453558466207\n",
      "Email Variance 0.24991536\n",
      "Email Residual Variance 0.24918421069820032\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th> <td> 4.143e-13</td> <td>    1.063</td> <td>  3.9e-13</td> <td> 1.000</td> <td>   -2.084</td> <td>    2.084</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>res_email</th> <td>    4.4304</td> <td>    2.129</td> <td>    2.080</td> <td> 0.038</td> <td>    0.256</td> <td>    8.605</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Payments Variance\", np.var(data[\"payments\"]))\n",
    "print(\"Payments Residual Variance\", np.var(residuals[\"res_payments\"]))\n",
    "\n",
    "print(\"Email Variance\", np.var(data[\"email\"]))\n",
    "print(\"Email Residual Variance\", np.var(residuals[\"res_email\"]))\n",
    "\n",
    "model_treatment.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice how the variance of payments went from 10807 to 5652. We've decreased it by almost half once we control for risk and credit limits. Also notice that we didn't manage to reduce the variability of the treatment email. This makes sense, since risk and credit line does not predict email (nothing does, by definition of randomness).\n",
    "\n",
    "Now, we see something much more reasonable. This new estimate tells us that we should expect customers that received the email to pay, on average, 4.4 reais more than those in the control group. This estimate is now statistically different from zero. We can also visualize how the variance is now lower within each control group."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbUAAAEGCAYAAADi9AsGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOy9eXgU15nv/zlV1at2CaRGaMHCeCGb45DIP2NjSAAv6I5YZGeZxJg4mZvrjJPhemYYx4kn48RJmEmGcTwm27UxWTyZsJm5CNuAY0yMx4pJQpJfsBNAsYQQrRWhpSV1d9W5f1R3qVvdkoWN0ML5PI8edZ+ubp1S16n3nPe87/cVUkoUCoVCoZgOaBPdAYVCoVAoLhTKqCkUCoVi2qCMmkKhUCimDcqoKRQKhWLaoIyaQqFQKKYNxkR3YLw4d+6cCutUKBSKaU5OTo5IfK5WagqFQqGYNiijplAoFIppwyVr1I4fPz7RXbggqPOYfEyXc1HnMbmYLucB43sul6xRUygUCsX0Qxk1hUKhUEwblFFTKBQKxbRBGTWFQqFQTBumbZ7apYTQNHqki7AFbg2yRARpWRPdLYVCobjoKKM2xfH5M6jvN1i55xQN3RHKs108XVVChS+qDJtCobjkUO7HKY6nYBYr9zTR0B0BoKE7wso9TfRI1wT3TKFQKC4+yqhNcSzNcAxanIbuCGFLjPAOhUKhmL4oozbF0awo5dnJq7LybBduTUlfKhSKSw9l1KY4gx1neLqqxDFs8T21LBF5k3cqFArF9EMFikxx+kN9XOGLcrimlLAlcGtSRT8qFIpLFmXUpgHSsshkEAQgQSrPo0KhuERRRm0aoPLUFIrRUWPk0kEZtSmOylNTXOq8mcFSY+TSQgWKTHFUnpriUkZoGvX9Bgu3n6LiyXoWbj9Ffb/BgO6hU3roFR58hbPVGLmEUEZtijNinppUeWqK6U+PdKU1WL9qizhGLqp7VC7nJYQyalOckfLULCkQmvp6FdObsEVag5Xh0pzHJ7rCKpfzEkLd9aY4gx1n2DUsT+3xpcXcdyhIj3RPcO8UivHFrZHWYM3KMNhZVUJlwMdDde0pY0Tlck5fVKDIFKc/1EfAK9i0qIh8r07ngMkDL7dSF+znX24sIsvQ1Ga4YtqSJSI8XVXiuCDLs11sWVbMnc81EwxFeXxpMc++0U3Ar/NiTTkaEonAtCQ90kWWpqIgpxvKqE0DBLD+UEuSG6Y828XxrjD+Apedw6ZQTEOkZVEREx8YtASvnw1z/2F7Ugdw94FmDqwu5//7WQMBv8HXFxaybn+zioKcxij34zQgS0TSuiAfqmtXm+GKaY+0LDLlIALJit2nHIMG9p5aSyhKQ3eEDQsKHIMWf01FQU4/1EptGiAti2K/YPOSABkuzXFBBkNRezNc7YcrLgHi+2vDPRatoSgA+V595ChINfebNqiV2hRGaBq5pZfTKT1ELUFFjou1+5pZvaeJYCiqNsMVlxTx/bVEj8WuqhK2HusCoHPAVFGQlwBqpTaFSFJO0AU9Eck/1J1l7XyNQr9BwG9w5MOl9ESUsLHi0iNxfy0u7p2tm3zp/XkcbR9k45EOtiwrTtlTyxIRpZc6jVBGbYoQV05IlPr50c3FfOH9M7jjmdNO266qEor9EIpCj6aiuxSXFsPFva0o5PR38t93lDNogQ4cqinHlBK3UBO/6YhyP04R0iknfOK5ZtoHzKS2VcPUFOr7jaQkbKFp9IohCSGVoK2YrtjXuhfyiukOS/7mYJCyJ06waHsD5wYtZdCmKZPijiaEKBVCvCCEeE0I8QchxOdj7flCiP1CiOOx33mxdiGE+LYQ4oQQ4ndCiGsn9gzGnzdTTkjXFo/u6pK2ERvQPWl18pRhU0w3hjQhG5m39SQ3P93IvdcUUBnwqajHac5kuZtFgfuklFcD1wGfFULMB/4BeF5KOQ94PvYc4FZgXuznr4DvXPwuX1xGUk7oi1gpbZ0DpvO8oTvCqd4oFU/W86u2iBJ2VVwS9AsXzX1Rti4vZmdVCQG/wd0HmtmwoABQ2o/TmUlh1KSUZ6SUv4497gFeA2YD1cDW2GFbgZWxx9XAD6XNK0CuEGLWRe72RSVdZNdTt8ymPMuV1LZlWTEbj3Q470sMac5waUrYVTHtEZpGc0hyzwtBFm9vYP2hFh6+vpCA3yDfqwMq6nE6M+kCRYQQc4D3AnVAkZTyDNiGTwhRGDtsNnAq4W1NsbYzF6+nF5ehyK4yQiY090UZNC0iluBgTTlIiUtAT1QSjBmxeBL2Ay+3AkMhzcPzeFQum2I6EI8OtqQgwwXPrSxDCDjdG+GR33TwYOUMLCmprS5lXq7beY/aV5teCDmJYlmFEJnAi8DDUsqdQoguKWVuwutnpZR5Qoha4OtSypdi7c8Dfy+l/FX82HPnzjkndvz48Yt3EuNMbunlLK1tSzFMP/+LIjrf+BM+fwaegllI3cBlGPzNoVZ21/cCUBnwpcgE7bg1gPdsE/2hvok6JYXibePzZzCQV8JXXj3LvdcUcPeB5iQtyAxDMCdbpyciCIaitIaibD3WxZfen6eu/ynIvHnznMc5OTlJrqZJs1ITQriAHcBPpJQ7Y80tQohZsVXaLKA11t4ElCa8vQRoHumzE/8BcY4fP562fTIjNI12053Whai7PMy64l2ELelU/4UIX75uJkfbB2nojhAMRZmTrXOoppyIBS4N8vQIlr94Yk4ogan4fYzEdDmXqXQevcLDwu2n2LSoyDFoYI+Ndfub2bq8mNN9FqsShI8fX1rMV17t4LHFl1EiJ78+6lT6Pt6M8TyXSWHUhBACeBx4TUr5rwkv/RewFvhG7PfuhPa/FkL8FKgEzsXdlNOVeDRXc184xYVYXZFJ64DF7bVNSflqM72CmV5B3R2lhKICvyE5E5Ks3NMwTNBVuWAUU5t4dPBIUlizM10s3dmQZOzuPtDMpkVFSiZrmjEpjBqwEPgE8HshxNFY2xewjdnPhBB3A43A7bHX9gK3ASeAELDu4nb34mPnqZ0i4Df42a2zaR8wyXBp9EUsrs53s2RHY0q+2qZFRaw/1BIzXBF6rPRVgg/XlColf8WUJh4dPNK+sZQyrbEr9BvomqDT8jgeDjXBm9pMCqMW2xsbaa70oTTHS+Cz49qpSUZ8JhrwG/SbdmSXsy+2wg5ZThy0ibPWlXuaYi7H9ANbzVQVU514dPCXX2lj220l3L432c3Y1BtJa+yK/AaNPRFMCX0Ri4ocF8UuZdimMpPCqCnenPhM9OsLZ9IXsdi6vJjOAZONRzpYU9vE5iUBVuweCghNzFeL56q1hqIq+lExLYlHBz+2uBBN0zi4ppxBS2Jakm/9yk5xiRu7gN/gwcoZzMt1own45q862F3f6wSV5OW58CrPxZRFGbUpQpaI8OzKUvoiknX7k2ehD7zcytwct2Owhofyx3PVNh7p4PGlxUmRYUrQVTFdkJZFtmFyok8mBYRsXV6MTxc8/Ms2tiybRbZbZ01t8hgKhkzqgv2s29/MizXleCf6ZBRvGWXUpgjSssgyBLc8fSpls3vzkgDt/VE2LSpiVoZBnkdnw0st1AX7kwxcXbCfB15uZdOiIt49w4tXS69/l1QNQO0zKKYIQtNojbhYtSc5IGTtPnuM7K7vZe38XNbtP5M2YGR1zBCallTu+CmMMmpTiPAIe2Lzct34DHjiD108cewc1RWZfHtxgE2LJLom+NzBYFI1YI8uECP4G9NVA1Al7xVTgR5pu9wbuiNUBnxsWFBAvlenc8Dkqnw3lQHfiNGRiUojuiboxaMmc1MUZdSmECNV9m3ui2JJ+N/XFtAxYPKP180kVwwihYUQmpOrFvAbKcnXww1WPMpSRUgqphoSyHZrVFdkpiRgb1tRwuNLZ9E1mD46Mh41uWVZMR/ee9opsqsmc1OPSaH9qBgbWSLCrmH6j48vLWbDS622oeqJ8G+LA1yeYTkDMbFw4n/eNtsxaJBe0HikagBKH1Ix2bHQ2PBSCxtvSE3Avr22CU0TlGcb/Ojm4pTq2AsKPWxeEuDHr3WxYUEBW5cX09wXpV8ose+phlqpTSGkZVHk13l+dTlhS6LHdO3eke9mw4ICLs91I4Bzpo4QuuM+iRdO7JSeNw3pH2k1qCIkFZMd05Lsru/lS5Uz017nnQMmoYjgilwXP7m5mECGy9lX7jBdPFTXzsPXFyat8HZVlTBXiRNMKdRKbQohNM02WmGTW59u5MqtJ3nkN53c85581h9q4cqtJ7lpewN/7DL57MHWlFppI5WvSVQrT1cNIB4hqVBMZtyapDzbhc8Qaa/z1lCUNbVNdIcl58IWhgaZMXksXdP40c3FKSu8Vao005RDGbUpRL9w0RfFidICWDs/1wlPhqForrXzc23XIm6n0jUInl1ZOqrBSnRX1t81l8M1pWpfQTElyDEsdqwoIWxKHl9anOKm33ikg4buCFEJc3PdeDXLCYxatL2B5r6ocr1PA5T7cYogNI0BS6MllDzwRovmauiOEIrCsl3JkYxxLUi3JtNGeMXdlQhAonLYFFOCzqjBV+qCPLI4wJdfaePAqjKiErSYmx5sA+fSwKsL/CJKtzUUGDWSxJamoiGnFGqlNgWIzyabElRB4sQHYiLl2S5m+nSqKzI53hVOCQyJWpAvBsiUg2qQKqYNEQt21/eiC8nXFhZyLmxxS8xNv27/Gb6+sJBtt80m2BelJWTSZboYsIYK58bFCYYX3f3w3tMs3H4qxZ2vmJyob2gKYIfZNxGKWrzc3EdtdSm11aUcrClnpk9n57A9sK3Li/nC4VYevG4mv27pT/os5U5RTFeM2J5xbwRCEZnill+3v5musIUpYU1tE819UX7XPuCMnbg4weYlAU7cdTmblwS4/7AtWpAuUlgxORmT+1EIsQR4Q0r551hds28AJvAFKWVwPDuosMPsA36DHJfGPe/Jp6k3miRovLNqNgdWlxGxwBD24C7w6qze08RzK8vY80afk3w9PJJRaBr9wp6xmpbEo0GWCKsVnGJKITQNDdi3qowMQyCEltYt7zc0WmMu/Bk+gyK/zvYVJdTEDGAwFKU4w8CjWUlaqvH3K/Hvyc9YV2qbsY0YwLcAF/Zt8fvj0SlFMm4NHqycwR3PnMa04BPPJUdord5zGkMIbn26kSu2nmTJjkY+8+58An6D9gGTBytnAKmBIULTaI64OHbW5KbtDcx98iQLtzcqN4tiShF3z9+4rYE7n2vmT10RwlHL8WbsrCqhMuCjPNtFSaZBZixB+3ftA/zNiy0UeG0B5BN3Xc7h28uo8EURvHmksGJyMtZAkdlSykYhhAHcDJQDYUapNq24cGQJWworHrmVbgY6YMokQ3f7Xlu5vzUU5ap8Dy/dMYeSTIM8MZikHlJ/LuKs+uLvVQoiiqlEogrOpkVF7P1zNx+7KjfJm7FlWTGZLkH9uTCfPnCG7StKcGuSb9xQxGudYR6qaycYirKrqoQs31Bqy8oEYWQl/j01GOt0vFsIUQTcBByTUvbG2pWD+SIgLQu/ble49rvS5+B09EeT2gJ+g6vzPZRkuvDqgtkZOoZIHo1hCzJc6d00at9NMVWIq+BUBny8d6aHz723wFHph+T9NE0IGroj1NQ20dRrcvUPT3LPC0Eevr6QgN9w8tJUasvUZaxG7VHgVeAnwGOxtoXA6+PRKUUq2XqUry0sxLQkW5alRmglmqvKgI+vLyxkyY4GPvDTP7NkRwMnz0X57AstSa5Ft2YXRlRuFsVUxq3ZE75v31RE1JL0R9MLf/sNjc4Bk8qAj02Lipib62ZnlV1g9+4DzWxYUOBM6JIrVaRPfRGa5uSA9gqPctlPEsb0LUgpNwJLgYVSyp/Gmk8DnxqvjimS6TZttfGwBfcfbmXLsln8ce1cnllZRlRKyrJcVFdkAvb+23CNx6SE7FgEV5aIUJHjSjGSSkFEMZXIEhG+tShgS8dpGie6wmknajO8Onvqe3j4+kLWH2rhqq0nWX+ohY032Ku0fK9OebYLvyGp7zdYuP0UFU/Wpw3nj+/jjXaMYmIY8zcgpfyTlPLksOe/H59uKYYjAa+hYUkI+HUsKfj7X7TweucgfkMjbMG/3lTI///xCq7Ic4+akB13LUrLotgVYX6ezos15Zy8ay6Ha8qUm0UxpZCWhYak0G8QtiQP1bWn5Jvtqiohakm+8IECDA22Li92Vmlr9zXzyE1FFPoN9q8qY9DS+PIrbaMKf8fTbEY7RjExjBgoIoQ4xRgkbKWUZRe0R4q0WGjU1DawY8VsNt5QxIaXWtKW15jl153nw5URLCmprS5FAr1iSCHByyA+TaNHs90tPZqLLM1+ryoWqpgKuDXJYFQggGAo6hTDTSyaGwyZKaWX4gV08706y3Y1pq2GDanh/KNWs1Db0RPKaNGPH79ovVC8Kaa09wkae6KUZArWzs9NW15j/6oyXJpg6/Ji1u4bGrw/u3U2g5bknhfOpNRSA1IKgz67spSBqFTFQhVTgiwRIax76BqMsn1FCV+tawMg16Nz8lyYYMhkw4KCtG75zUsCKco7idWwYah4qBC2Yv+bVbNQ1eMnjhGNmpTyxYvZEcXo6EJQXZFJpltjhk8fsQp2VMIdz5zm+dWlbF1ezKwMg6glyXRpLNrekOIuOVxTCpBSGFSF+iumEtKyyDIsIpbOz/54jn+8bqYTARlfeWW4xIiV4z/xXHNKe6Hfvj3G3/+5g0G+fN1MKnxRshg55B+hqsdPJGMWNBZCXAPcCMwgYYEtpXxwHPqlGIZbs/hS5UzW1DbxoRI/939gZtqZYlNvJKaMYJHh0jg3GOX2vc08u7JslND9VAM5aqi/cq8oJiES8BmCa4t8KSH9dx9oZm91adox49EFwVBySkx5tovSTIOX7phDa8ydWRfs52j7oD2xk4NOyH/YShYH7xUeVT1+AhlToIgQ4q+Aw8AHgQ3Au4D7gMvHr2uKRCJSc7Tsqiqy+N7vOth2W0nKZvjlOS6O3TkXtyapqW0i12OwY0UJp3ojI4bup6uzNtZQfxXWrJgMaIZBY689OZubkz5QymcIdqxIHjPbVpTg1e3AkeFpMqGoRdi0yPfqbFhQwCfn57BpUREDln3Ng12Pbbg4uKoeP7GMdaX298AtUspfCCHOSilXCSFuBT4yjn1TJBBJGCj5Xp1v/vosnQMWe6tLcWkCIQR/eyjI7vremB5kCZ+an4MQgnyvxlfq2nh8aXFKVd946P5wV0pFjutNFRXiYc3KzaKYaM6aLtbUNrB1eTHt/dG0K7KwCZt/28nmJQHm5brRNUF/xKQnYmFJyeYlATJcdi7b/YdbCYaibF4SYMXuRqorMvli5UxHI3K0a11Vj59YxmrUCqWUv4g9toQQmpTyGSHET8arY4ohhKYhzaGBErYkf3ttHp96Zz79UQufobH+xSBr5+ey/toCOgdMHnqljW8uCuDRJF9+pZ17ryng0aMdbFpkhy4H/AaFrghW1B6Q6VwpuEjrXomTKE8Eys2imDgisT1mS0rchsaWZcWs299MwG/wYOUM5ua6CfZF+fjVOXxwRyPl2S6eX11GllsnbEFplouPP2vvq21YUMDGGwrpHDAp8uuAXYy3pjY1hD/dta4ktiaWsRq1JiHEHCnlG8CfgGohRDu2/qNinOmRbu47FOTxpcU8erSDWT6dj16V64T1Aynh/Y8vLaY3bOLy6nzkqhyeer2LtfNzyffqzM40KNAjdJs6Yanb0VlE7NL2wwqDjlYsVIU1KyYLLk3EVkOC2/eeJuA32LJsFlluPWl1tX2FLW5cF+wnKuFMT4QbtzVQnu3iqVtmYwg70MpJk7nNPn6kYryDUpClaUmTvUSJrZEmhIrxY6wbIP8MXB17/BDwY+DnwD+NR6cUyQzGih8+9XoX3/1QgAy3ToZLY9NNAZ59oxu3LlLC++8+0IxbF4SikseOdvKxq3LZeKSDtfua0YCTfdrbVkNItxenJLYUE4Fft1X5Z/gMGroj1AX76Rq0UlZXNbVNbFhQYFe0BkoyDee1jz17mvYBM0UYfMOCghGL8UZMaI64UsaOtKy0+22K8WdMKzUp5ZMJj58RQuQB7gRhY8U4osdmoZ95dy7NfSarE9wau6pK8BnpQ5X7IpK2/ojjenywcgZFfgO/bvG5V9rYtKiIfK8tv/XlV9p4bHHhebkNlZtFMVnoiYBpQUNv2HHTj7S6KvQbbFlWTEsoSoFPZ9/qMtyaSHI3Jh4/K8PgG6+2s7OqJGnsPb60mA0vtfBX78ojq8ClXO6ThLEWCR0+hY8C0dje2gWZggghngCqgFYp5TtjbfnAfwJzgDeAO6SUZ4UQAngEuA0IAXdJKX99IfoxGfFqFjtWlDDTp6fkmq3aYydcp9uYzvfq3HswSDAUZdOiIq7M86ALSVgK1l9bkJSc/fjSYuR5+gyVm0UxWXBrdhpKXCLr7gPNzupq+LjI82h8cv8ZHltSRLDP5NMHhgQJtiW4J+PHz/QZfO+DhUQskTQRjIf5r7+2QLncJxFj9TdFgcgIPxeKJ4FbhrX9A/C8lHIe8HzsOcCtwLzYz18B37mA/Zh0+GSEgF9PioCM09AdQROCbcNClbevKMHvkmxYUMDW5cW8s8BWW/hN2yB9EekYtPhn3H2gGestjErlZlFMBrJ1E5eWLJFVlmWkHRef3H+GYChKvtdIURi5vbaJH95cTGXAR3VFJs+tLKNzwGTQ0nBpkvWHWli8vYHVe5qoC/ZTnu2iL2Ipl/skYqyBIpcNez4L28D83wvVESnlISHEnGHN1cDi2OOtwEHsPLlq4IdSSgm8IoTIFULMklKeuVD9mUxIy8ISoI8QKmxKycN1bTy/uhyQNPVG0YXkTJ/F+kMtzix0x4oSth7rYv21BWmNo6l8hoopSkjquHScqMfVe5ocebgfLJ2FWxP0RSx6wibBUJTHlxbT3m+mHQdt/SZPLJtFKCq5+enGJNf6sytLueXpoRSWLcuKmZWhK5f7JGKse2oNw5oahBBrsWusPX7BezVEUdxQSSnPCCEKY+2zgVMJxzXF2qalUROaRnu/iSWlM2gTB9Xp3gi763s52m7n6XQOmJRneVm8I9lVuaa2iU2LikZ0y7iFyqNRTE0GLI2oBT9+rYsDq8sQCHQBTb0RvvRym1PVWgCbFhXxwMutTsDI8HHQGopyblCMIBNXxuGaMgYte6/bq1n4pHK5TybGLJOVhmxg5oXqyHmSzk824u34+PHj59U+2cgtvZxVtUECfoMnls1ykkT7IhYZhuB7v+9iZ1UJ+V6dsiwXOW4NU6Z3Vc7KMPibF1tSErF33Bqgq+nPdAGegllYmoFmRRnsOEN/qO+inOdU+T7GwnQ5l6lwHj5/Bt7iuXgN+My78zjTF+UTzw1d28+uLMVnaEQsye/bB9l4pIO6YD8bj3SkjIO4av/GGwrTjp9QOMK5NyauNvJU+D7Gyts5l3nz5o342lgDRX5EstHwA4uwQ/vHk5a4W1EIMQtojbU3AaUJx5UAzSnvjpHuH3D8+PFR/zGTiU7ppaHb1nTsj1q4dEFJpos/nh3ke78/y8euyk0amDurStCEHGGT3I7ueuDlVjYvCXBVnhtPPNk6s4T6foMVSdGMc7jiIiiETKXv482YLucyVc6jV3iISokp7RSWxP3igN/gTJ/Juv2nUgxXXbCfR4928MKacpr7okkaj3GZuOHjx+82KJyg/8lU+T7Gwniey1gDRU4AJxN+XgE+JqW8d1x6NcR/AWtjj9cCuxPa7xQ21wHnput+GoChC2ezu7EnyqcPnKGxJ4zP0FgzLzslR231niaae6MphRK3LrdDkDcsKCAYilKcYTBDDzsBHudT+FBpPiomCxJoH7Bo6TMp9Nt5apUBHzurSnhyeTH9UYuAfygf7e4DzY7rcf21BXy1ro2BqB0EEg/+CGTo7KpKDjJ5KxXh1Ti5+Ix1T23ck6yFEP+BHRQyQwjRBPwj8A3gZ0KIu4FG4PbY4Xuxw/lPYIf0rxvv/k0UQrPdjPG9tI1HOtiyrJi9f+7mrvl56JqR1k1S4DP4lyPtbF4SYG6Om2Aoike3k7i/tSjAodvL0aRtyLI0e08gbKXPdwvLZG+v0nxUTCYsNNbUNrBpURHvLPBQXZGZVmEnvgpr6I4wv8DD5iUBLCl54tg5OgZM9laXcnbQYnaGwVfq2rjnPXlsXhLgijw3bk0gkJyVHrz62PbR1DiZGEarfP3JsXyAlPKJC9ERKeVHR3jpQ2mOlcBnL8Tfnez0SDe3PN3Ih0r87K0uxaNruHXJR67M5YGXW/nawsK0bpL6c2H+13vy6QmbrN3XTF2wn2N3zqU823ZbFvkNusMmj/ymky9fN5O5GRaaKdJ+liYEvQxVylaaj4rJhBnTfdx4pINtt9mV4eNRi5Bc9HPjEVuEwJIwaEqK/Drl2S7uvaaAT+4/Q12wn5fumMPHr86lO2zxUF07/3JjYdIenR3x6KLYNbphO59xooqKXjhGWwt/IuHnTuB72LJYn4r9/l7sNcU4MmjZ+wIfuyqX23afwq1LopZgTW0Tu+t7+eT+Myluxp/cPJuH6tqpqW0iKnFcKoaAx5cW81BdO2tqm+iPSu69poCfvN7FiT6NswNmymfZoc/RJCktVVpDMZlwa/b+cV2wH0Oz0LWRg6S+vrCQe14IMv+HJ1l/qAVNCLYsm+Ws4sqzXSAl/VGLWRkunlg2i2/9qiPJMK3b30z9uUhat3wiYx0n8RXd25WtU9iMVvl6SfyxEOJR4Gkp5b8ltH0emDu+3VPomuDByhncfaCZD5X4aQ1Z6IIkZYOnXu9i06Ii3lHgwaOBieCxJQEaeyLMy3FRXZHJA5UzyXAJcj3CViE/0kGGS2PtPrt44m27T7FpURFbj3UlffajRztYOz83aZapSmsoJhNZIsKuqhL+6ZU26s9ZzM4y0l6fAb+RkuYSV+TZeEMhfRGLQIaOR9P4y+eSXZfBkOmojDR0R8hwaW+qIjLWcaI8HxeWsU4FPg48Oqzt31ErtXHHq1nMzXUT8Bt8sXImX6lrw6UJPLo9mjy64J735DHTp+PVBR2DFh/c0cCC//gz6w+10Dlo8f0PBcjzaG++EEkAACAASURBVPRHJZ99oYX1h1r4+sJCLGm7bQxNOO6be68pcFQT1h+yqwBsPNIBDM0y45qPb3cTXaG4EEjLotiv8diSAOfCJoaQKUEe224roS9ipV05WcDi7Q3c80IQSwqePHaWTYuKOFhTzqZFRTx6tIMNCwqc94xVRWSs40R5Pi4sY81TCwJ/AexKaPsfDIXYK8YJn4xguTz8y42FhC3J59+bT2u/6SSGxn38Lg1+1TrgKIjAUCTk/lVlXLH1ZEIEZCvr9jfzg6WznHL2cfdNXGLo6nwP9efCPPV6FxsWFJDv1emLWPgNiTSV5qNicuEXUZrCOtlujYglCPh1nl9dTjBkh+o//Ms2vrUoMMLKyTYeDd0RvlrXxgMfmMnte5OFiwMxoePzUREZTRs1cQ9N1zTl+biAjHWl9jngSSHEy0KI/xRC/De2bNV4h/Rf8kjLImLBJ55rxrQkJZmuFL26dfubKfQbI6qSA1QGfDR0R1i7zw5nbuiOUJrpYv+qMoSAn9062zFs6w+10D1oUpHj4uNX5zort3teCHImJO2ipUrzUTGJCEmd3rA9Vta/GCQUtatZ53t1Mt0awZDJd3/XwY40WpA+Aw7WlLOzqoR/eH8Bbf1Rti4vZmdVCQG/wd0HmslwazR96nJevqOc+Xn6mwaJxEk3TobvoX3uYDClX+fr+VCpA0OMNaR/vxBiLraQcDFQC9RKKTvGs3MK0AyDSMQ2Tt/6VQdf+MDMEXQbGVH+6nhXmA0LCpyyGfle3YmQXLH7lDO4t91WTChqf87XXm3n20sCTtJq/O+s3NPEizXlGMJSqzPFpGHA0mjrj/D935/lC++fQWOPySO/6eDz781nTpaLH98yG5B873edSXvGX61r419uLGLx9gaqKzJ58LqZ3PNCaipAW8ikrd/O7Xy7IfnD99B219sVvA7VlGNa8rw9Hyp1IJkxm3MpZbuU8kdSyo1Syh8qg3ZxOGvagsXl2S6eOHYOXaQvzNnUG3Fkf4ZHLz5U106+d8h90hex2HbbbFy6cPYNvlrXRp7XxUyfxlX5Hv75xiLCUekkrcZp6I7wRndERWgpJhWmZZeeWTs/l/YB26B94f0zAMGyXY3Me/IES3c2UlWRzcYjHY7S/u76XjQhOHbnXDbeUORM/GAoFeDByhlkuARFfn1EMYLzYfgeWmXAx9r5uUQs3pIr/3xEEy4FRrwjCSGeTXj8CyHEoXQ/F6ebly4RS9ITNtkec0/8uTvMj25ONlw7q0p47GinI/uzb1UZ//3hOY5wazAUdVZxO1aUsKDQTdiETx844wSEfLFyJl5dMmDCrU83cuXWkyzd1cjXFxZSGfA5/SnPdtEZqw58KQ8cxeTCpUNfxKLQbyQZt+Gu+rj7PU48b3P+D08mVb2O09AdYW6Omy8cbsWSgoDfeEsBHInuQV3TqK7IBGyD9vD1haw/1MLlT554S5NFFWiSzGjuxx8mPP4/490RRXpcmqAlZFKcYbBpUVGsMq9IEjXO9Qi+vTjAtxaBLkATkm+82s7u+l4n8ksTkk2LivhKXRuPLA7wl8+dThrsNbVN7K0uTZmprtvfzOYlAcdNGXfHxF9XxREVkwFNwEyfTrZb5+S5MCWZLkLR9NGOhTHvQzzo4/7D9vXcGoqmdd83OlUwBtm8JICmJYsRvBnp3IM7VpQAsHZ+borM3fmG86sUm2RGy1N7KuHx1ovTHcVw8vQIc7JdeHSN9YeanFyytfNzyfcKAn43bg3OhExurx2K2NpVVcKjiwMcaR3gu7/rpKoii3yvztr5uURHmNm5dS1te0WOmxN3Xc4fzw46SapwaQ8cxeRBaBoDUbj3YAuPLi7kshwXXl3jtc70Rirfq3PirssxpeTO52y1ncqAj1yPxvYVJdTUJkc+Jk7i5ua6+fDe0wRD0THvW6XLQ1tT28ShmvIRC/+ez2QxnjqwMkmIvOSSrfE2pjWuEOKjQoirY4+vFEK8KIT4uRDiqvHtnsKKRin1mvhdsH1FCYV+g931vWw80kFfxC5i+GrLoGPQYCip1AK2HuviY1flJuWeQfK+XGXAR221XfSgtro0xd3o0QWFrgjFGQbBUNRpV7lpiokmvgr649lBgqEoH/hpA71hE0ODGV6dLcuSXfW7qkpYt6+ZsCU50RUm4NfZt7osJnws+c5vO9m8JMDra+dyYHUZT73elTSJa+yJOPqRY3W/j+QeNC2JV7PS7pGfTyXtxNSB+rvmcrim9JINEoGx56l9Fbg+9vib2MVBe4HNwAfHoV+KBKxolLBw8dW6Nh5bEqC2upTLc924NMELa8owZXoh4kFTsummIl7rDDvFQzce6eC+Q0G23VbC7XubCPht6aDhhUfvP2zvxW1ZVsygaSE1iwqfpXLTFJOK+Coo4DfYsaKENbVN5HgMohZ87dV2Pv/efPatKsOUtnuxwKsRDEXpHjS5Kt/FFytnpqzMnnq9izXzsqnIcbPh/TP4Q2eYYCjq5HjGGeuKajT34IVaZUnLst2VApBckiu0OGM1ajOllC1CCC9wA1ADRID2ceuZIgmfDv++pNBJvA74DR6snMHluW7cOvzttXl889dnnePjKyxDgxNnByjN9lDoN9i6vJh/PtKOS4MX1pQTsSTLdyWLv67b38yBVWX8vmPQMW6Ha0rJlINq4CgmFfFVUEN3BEtavFhTjiage9DivvcVJAkRP3XLbBp77IlagU9DFxqDZtQROo4HWg1Pvt5ZVUIoYjkqPnHG6n4f1XCNkqCteGuM1ai1CSEuB94FvCqlHBRC+FEhAhcFoWkMWGBZGqv2NBDwGzx8fWFy5erYxvM3f33WCQ75/MEg972vgKXlWdy2e2iTetsKu0q2BbT1p4/4Ot0XZfWeJqdNBYQoJiPxVVDAbxA2Bf9+tIO/vqaAFf9lr97iOWl9EYvLsg26w5LeiIVpCf72UNAJporvna2dn+sYNBhS5fnB0ll8/LnkoKmxrqjezHCpVdaFZaxxo18BfgU8DvxLrO1DwG/Ho1OKIeJ7Bou2NdDQY89INywoSImYWlPbxF9fU8Dra+eyt7qUDJed1PmJ55p5IzaTjR97e20THQMmH9l7mhmxROxE4mH7ic/Px8evUFws4mLGD1bO4OmT5/if78onatmC3wAbj3TQOWCS79UJRWHDSy0s+I8/c/PTjdx7TYGjtBMvHBovMppIQ3eEkkzbfXhVnvtN963SqXsoBZ6Lx1gVRZ4UQvws9jgUa64DPjJeHVPYJEZOxXPNZmWkH3imhGMdg2w91sUDH5hJZcBHXbCfDJeWcqzX0KgL9vPPR9rZtqIkKXJy+4oSvlrXBgxtrl+qkVSKyY20LGZ6BTN8bgr9uSyNudJt78VsJCJlzyyuuB+vsRZPYyn0GxT50yv8uwROMFV8pQXQKzxJNdAApe4xwZyPHIQPWCOE+PvYc4Oxuy8Vb5HEyKm4YkiOJ/3qShN2tOO91xTw8C/bnJL1fREr5VhvTE2kqiKL7/62kxdryjl511w2Lwnwnd92snZ+Lgdrytm8JECxX6gBqZi0CMC0howX2GOmJWSmtMVXZPHniUo7+V6dr/+yLSVicseKEnQN7nkhyNwnTzoJ0s0RV0oNtB7pVuoeE8xYQ/pvAv4I/CXwpVjzPOA749QvRYz4ngHgqOj7dNLKYfWFLSeZ87PX5FPoN/jRzcXMyXYlHbtlWTEg2fBSK+sPtfCZd+ehxbbMrszzkO+1LwtDE1yZ58EvzHRdUygmBVnC9lIM915kuNLnXSYasrj3Y1dVCVkuwafflUdZls6B1WUcu3MuP1g6ixlejfUvtqQYqvpzkZS2wTT9uJTVPSaCsa60/g34sJTyeSFEPMSuDvjA+HRLESe+Z7AqNvsLhqJIBI8e7Ugp5vm1hYWOUn9Zlossl6A/avEfr3c7xxZnGJwdMFn/YotTLLQ3IrlxW0NS0MlX6tqcTXTbfaKNuFpTpegVk4HhbsO+iJXWlRg3ZDurStCA51aWke0RDEThI8+cTjn+UE25Izocp6E7kuLWD/gNpBRK3WOCGav7cY6U8vnY4/hXE0a5Hy8KBV6NTYuKOLluLs+sLCNqSTbeYCuLJBbzDJvSGbAnu8Kc6Yvyu/YwS8szuTLPTY5bw9AE3/v9WXbX95Lv1dmwoCBFH29NbRNr5+c6z0dzn6hS9IqJpke6ndzLRI/EnJjhGl4s9LJsF3urS5FS8t6n7KCRsAkuTToaq/Hjd1WV4NctaqtLnfI0lQFfWrf+g5UzuO9QMMWLskuJFFxUxmqUjgkhbpZSPpfQthT4/Tj0SZFAj3TRF7X3ytZfW8DafUNh/NtuK+FLlTNo7Iny6NEOx9DFE0g/e02+UzQ0HgByujfCfe8rYN07colYcsQabHEXTfz5SCH9qhS9YqIZtOxI368tnMmh28sZjEqOd4X51q86+GLljCSPxr0Hg9QF+3npjjm0xtRxGrojtIZMusMWz77Rzb5VZZwbtMj36hS5o5zoJaUo76wMHZ8uqK0u5aG6doKhKPNy3eyu7yUYMpP+5kzvyF4OxYVnrNPp+4CfCCG2Aj4hxPeAJ4G/G6+OKWzCFoQiJhtvKHIMGsRC8/c20dgTZf2hFh68biamtPfUHni5lTXzslPEiWtqm+gOW7SE7D0yTdhWanjQSXVFJjN9ujMzra7IHDGkXymEKyYaXbNdfrrQGIhKlu1q5KG6dj52VS6vdYYdibjVe5qoC/ZTnu2iyG+w8YhdPas820VX2OTuA81cX5zB8l2NFPp13JqkI2qkBH6s299MS8jkw880A/Cjm4v5xe3lZLvssROvFN85YLL1WBdC+R0vKmMN6X9FCPEe7ECRJ4BTwAeklE2jv1PxdnHHVPrdWUOb3pUBnzNwyrNdvHxHOQOmxeud9grrwcoZXJ3vTmtsMlwaa/c1s29VGct3NXL4jnJ+dHOxo7xQXZHJlypnJiVr71hRQrZuYkXT9U8phCsmFq9m2eIDwr7kGrojbFpUxN0Hmgn4DR5fWpwkVLBtRQk94ahj4H50czFRSzoeioDfIGLB6d4oRSPkrXl0kSKA8HRVCV9bWDjmsaMYH8a8JyalPA38c/y5EOLdQohNUsrbx6VnCgA8uuSqfBea0BzlhOGD6Uc3F1Pg1ZNcJNtX2CusxA3uxFpo8WixUETy4qk+9laXcnbQIs+jOYMShvbYbHdi6shUCuGKicYnIxT6PEQlDJjSCc+Py2c98HKr4w6M55z1RExev3MuwVAUrw45fhcv3TGHGV6dRxcXsXSnHThVW12adtKW7db4yDOpbvfNSwJJSiYtoSglGS68acaOYnwY1f0ohPALIb4ihPi/Qoh/FUJkCyEqhBC7gJeB1tHer3h7CE3jVJ/kVI9J14DJz26dzZblxXgNwaZFRXxyfg6bFhWhCYEQwqlSHXc1bryhKGWTfOORDqdSdnm2i+NdYT58ZQ5t/SY3/OyNEWWzRnInKoVwxUQjLQsTkEgsy161xSMfwU6FWb2nibX7mvlN6wALtzXQG4Hn3uhmdqZBrsfgRFeY+w61cPPTjfRGhiq+P1TXnpK3tmVZMf0j1GrL9+pO0c/F2xu454UgzSGpAqcuIm+2UnsMeC/wHHArtvbjVcBW4NNSSiVoPI70SBer9pzip7fO5uygiaEJ7ni60XETplMYj9c7a+iO0B222LSoiEK/wQyvzj8faXfUxjf9usNRHd9222wK/QYv3TGHPI+Wdmaqa4JOy5M2ZF9p1ykmEqFpeAQMmPb+2gyXoD86cm20+KTv4JpyFu9oSHl93f5m9laX0tZv0jlg8uPXujhYU460JG4NeqKS+nORtOMkx6PzkWeSBcJXqcCpi8qbGbWbgWuklK1CiEeBRuAmKeUvxr9rirBl577keXQGTense4FdMTedWkJc9qc828UMn07YkpRmGbSFonz6XXnc974C+qMWf/WuPCwpubHYS/uA6eTBVVdkptwMdlaV8LmDwWF5a2o1pph44iklX34lyKOLA0hdEpWCG7c1UBnwsWlREe8o8PCHjuQCtw3dESKxfbT488Txc3bQYvH2Bmdl5tMlXjkAErJcGnkzXUn5o/Fx4dffftFPxdvjzYxappSyFUBK2SSE6FUG7eLh1uzclw0vtfCtRUVJg2W0UPx4bkx/1GSGV8e04GjrAJ96Pph0/C8/chn/890Fzv4B4OzBvbCmnJZQlM4Bk1DEctpVyL5iMpFYT00I6AhZFPk1x12Y6dZw68JJbYlTnu3CrQtHHzUefDW/wENtdSlh056wxaMdX6wpxxcTJpaWhZdB5vq0FOX9Hum+uIFTlgWWCaaZ9FhYZkK7/ZowzVGOtYaOjf12jh/eJocfa9mfMexzscyE9qHXrTlXwLz3jcM/w+bNjJohhFhCwhxj+HMp5c/HqW+XPFki4uS+PLI4kDRY4knWwwdPSaaLTYuK+KdX2rjvfQX83S+CBENRdlWV8Mn5OfyhM+yokRf6dc4OpO6h7a7vZf21Edbua2ZXVQn/6+dDxjA++AcsDTSPUg9RXFyG3TSj0QH62jv41m0BtI4WIl2D9BgWL15n0TswyPefb+TjV2TyzHzJF39xhra+MLN9Gn83Oxf5qya+mxXmF13d3OTz8v3/6GB7X5iAV/Dp+Vl8vbeLU10DGNLE483DwsRtDtqGIHZjz7dMhGURtuxivjnS5NWwyQuNPQwMRskxJDcGPGQ8EgUzmnTjFwkGhwQDkmoI7L/xrkgEHZlsqKagrz8aHpxQo9aKHcIfp2PYcwlUXOhOjRUhxC3AI4AO/B8p5Tcmqi/jgbTswoTl2S40SApN3nqsK62bsLEn7NRBO9o+yA+WzmL5zkZW7Wli/6oyGnuiyeHNt6WPkpyT7eLnq8tw6YKA307Ergz40oYxK1fkODLsJp46Mx5hVpxwoxQps/DhN9Xkm2f8eWFrC67X64Zm8+lm4sP6MOLN2kz+7LSriuH9SPns1Jt4JhAEO2wNKBr27/vXhMc/S3zhv+1fpdiBAmDfSByODkvCPTn615SY6ekD1iS+2Dz6e8fKtJFvssZXS3bU/5OUcs64/vW3gRBCxw5kWQY0Aa8KIf5LSnlsYnt2YXFpsGNFCRbw6NEO9q0qo3PAJM+jo2uSzUsCZLg0+iIWHk2Q7R6KsorXgYo/1oRIqcN2+94mnltZxtH2wSTj+PmEPbR4AdK4WPK4qYdIabs2kmau1rCbqjnsZjiS2yTdzdca/QYcfy1hJp5iIEZyySQ8n9vbi9fjGaF/Vuq5jNi/iZ2Jz56wv6yY1pgTaNQmOR8ATkgp6wGEED8FqoGpY9TiN/FRfNw6OoGohafb4mulYVr+0M7GX7Zx33ty+Pdft9HeF0aXFoY0KfYJ/ukD+fx9pJ3Vl/nIcQnyX/kT/xRqp28wQvYLv2XFsRYMaWLE3qNj4bey2TsQIdMjyYhIfv/dXha3hPiQtDCkRcdrGj8sdCNfszjUH+ZP7SG6+yPo2J+Rc9KDy4ykXSmkneHL4YbA4pr4sdOA7InugOKSQuo6aDpoGugGaNpQm66D0GNtRuyYhNc0LeE1fei14Z+h2T8y5b32Yylin5vYl8TjEz7HyisY1/+HkFPQJwsghKgBbpFSfir2/BNApZTyrwHOnTs36okdP36cefPmvenf8Wx+CGFGz2ODdbSZeLLLSCiXnUJx3qTenA2s2I00InSkpiE1naZ+Sb+lERUaltDQDYPLcr0Il8GRtjAul8E1RRn43Dp9UuPl4CBdUQ2vx+D62VnUtYVp7reICp07rsrlR3/qwxQaGV4Xy+Zks6exn7+cn8e+U/0cPWsSFRomGjl+N//wgZl4hJVsMBL7nM5oxH7LFMOjIzWd+jfeoGLePMdwOZ85BRnr/Xcs5OTkJMWVTuWVWroA2bSG7Pjx42k/YKT2RK559cVps4JQTE3iN+z4zVrGZ8FCIJ3XYu0ifpzdNvQ84TNE7IY6lmO12Cw85e8Pey32mcl90IdeS/O5aV+LPY/f3OM/JJxfIj5/BoMFc1hd2+TkXf7bTYXM8BnMfzJ1I+xPa+fSEooyx2dgaILf9oQpz3bznd92sO4debh1jT+dHaSmrp06rx3+X57t4raVZTy9r9lJCTj4F+X8w/YGvhN1ceCeMh5KrLh9a4AzZ5voD/WN8QuO/UQljKY84svgeNMF2qCbBIzl/jsSoxnEqWzUmrD3eeOUMMKWbLp/wJhnCro27hubimRSZuIjuE7kMLfGUHvCLDbhfTKd2yTlMxLcMcOOtW/WerKbRY+5WMTQ3zsdDDK7tDTh7yXP0uXwz9X0EY+9EDNxwVtLkbqQs+nxold4WLjdlqvqHDAJ+HVmeHRcWvq6Zh7DzmErz3ZxcE05j/ymk0cXB/jUO/NpHzAJRaOUZ7sIxhT840nZG16y6w/Gc0A7B+x7Qnyvuu6OUkLRodB+6S++4Oc6Fb6PsTKe5zImoyaEmAn0Syl7YwEadwIm8GMp5UT50F4F5gkhLgNOAx8BPnbB/4qmA+NXC0kKkd5HHfttaQZRNOfmaQmN18+ZmELH5zYozvagGzoetwtL03mheYCo0IkKjajQMdFYVpFDWAqEYbtB9p0eoCssyfC4uHVuDvtPD9LYZ/K59xXyg2PdtIclJhoRTSfH5+YjV+fxr0e7Yp+rk5/h4s535PO1X3Xx/eWzydKtBAORcLM2XISEm7DQcRk6GbrlnO9wX/uJ+nouv+LKKetOSaTHfxxzmtx8JjuJVSL21PfwnQ8GOBMyeeilYIqQ8dblxQhwctNMKfn24iLaBkynokU8x3PLslloQtA5YDpJ2+uvLXCM3FOvd7GzqoRCv8GgJQmHodgVtvPYpuaOzrRhrCu1PcBngN8ADwP/A/tO/15g/fh0bXSklFEhxF9jS3jpwBNSyj9c6L8z8On7AWnPxIdtkkpnJaCnmYUnvJboP0+zKhiNDrxYEv72UAsbbyji5LmwI1wcpzzbxXMry9AEfH5XY8prlSvLWLuvmR/fMttOtNaH1P7LK2dwY46b+nNhevLdPNCR6rL55C1zebF/yL3y+NJi1r/cSrAiinVNKaZMjXyMKz0MCR1rPF01si6ksxJTKM6DeJWIgN/gzvm5hC0cAxWva1boN8j36vSGTTTg35cE+M8/dhG14I9nk8dTXNZq85IAK3Y3On+nPNtFebaL51eX893fdfCxq3KTDOaWZcXk5bnwKkGCCWesRu0K4Gjs8ceB64Fe4A9MkFEDkFLuBfaO598w33/TeH78m2IIQUTa4fQbXmrh4esL2baihNsT8tO2Li+mrT9KeZYdjp8469xZVcK2P50jGIoiGJrVpss5G0nZ/42eCJuXBJiX66a5L8qGl1oJhqKjqvGr4qGKi0GWiLCrqoQzfVHW7mvmwOpy55qLCxkDHPnoHNr6TfK9Bn0Ri8+/t4BHftNBVUV2WmWeeblDyiCOVJZm4RMR/vqaAm7a3pB0bcdVR7wX9/QVaRirUTMBtxDiCuCclLJRCKFh5z4qxhENC0PTKPQb7K7vpcCr84/XzXRKW4QtiU8X3PHMaUe78cDqcs4OmDT1RnjolTY+/94Cbp6TCVjOQN2woCAl56ymtonnV5dztD1V5DVee+pQTTn/cUvx0N7BCBGcoxYPVRp4igtIvkfDa9j1A916an2/6opMLCmSSjPtrCrhM+/Oo60/vTJPb8TixZpyBk2JKcGrS3zSvt5NKdNe26Yl1bU9CRirv+dZ7IT87wA/jbXNx97LUowjAtCFpMhvUJ7t4olj5/hj11A1396w5Rg0sCWulu5soKk3wuo9Teyu72Xd/ma6whZdg5Jtt5Uk1ZtKJL7Z/vzqck7cdTmbFhWliMCaliRfDJApB0dVEYm7hRJxNPAUigtEj3Txh84wfz4XtqtJQEqpmI03FHH73mTx79V7mvjj2QhuXaP2L0pSSssUeHVu2t7AlVtPcuvTjZwbHLpuPSNc2x7lPZ8UjPVruBuoBR4HvhZrmwF8eRz6pEggS0QwpWBv/Tl2rLAH309fP8fe6lJqq0uZX+Bh06IiKgM+5z1xYePE5zO9OpkujYd/2camRUUUZxhpB2a2W+O+Q0FcGqw/1OKIve6sKuGlO+aga2JMtaHixUMTbxZxd6VCcaEIW3bNs8ty7GK5/Sbcf7iVHyydxet3zmXzkgCDpl2C6WBNOTurSqgM+Jwq8Kv3NOHSNbYsm8XBmnI2LSri/sOtnOqNprjOe6QbgCwRHuHaDk/Y/0ExxFjdj/dKKb+Z2CClPCiE+N/j0CdFAvECiKXZHr5S18ZPby2OCRHLJHfKcDdhPOQY7EGX69V57GgHu+t72V3fS2XAx5Zlxazbn1zm3q3DN28swqdLnq4q4cuvtHHvNQXnrfeYWDw0UcVcaUQqLiRuDUebVACGBsFQlOU7G6kM+Pj6wplEJY5Kf3ysPHq0w6kC39ZvEpWwfIddrubByhnke3V2VtlFdeP1CUMmZBmaurYnOWNdqT04QvsXL1RHFCOjCZw9tTN9JoOmYE2aWmobFhQ4Wo1bj3UBDIUyS8kn35nvzFTrgv3cf7iVfavKeOmOObywppyH69qo2HKSpbsaaeqzmJth8e3FgbR6jz3SNWJ/40jLIlMOjsldqVC8FbJEhG8tCnDr06e4cVsDfWHLcT/WBfvpj0oncAqGxsrGG4qcKvCtITvI6ivXzeDRJQHueSHI/B+eZP0hOzCrMuBzqsTHr3t1bU9eRl2pCSE+GHuoDy85g63O3zNeHVPYCE3Dq+HsqZVlGXh1wdblxXQOmEkzyXfN8HJgdTknz/bztYWFbLyxCCRELYubdjSmrOqCoSgnusIU+g3WvxhMqpkWr9ZrWunL1p9vwIfQNHqki7BF2urZCsVbIX4NNXRH+OT8HBAwJ1vnwOoyROwCTXf9nh00CYaizqrtX28K8NGrcvnQzoYUA7h5SYBAhsFjRzu5Om+GCgaZ5LyZXE8MvQAAIABJREFU+/Hx2G8vqSVngsC949EpxRA90kUoLPn+7zt5ZmUpoYhkybAS9E+93sWaedmA5HRvlLIcD7c+fSopHDngN2jojqQM1FDEosCrJYXxQ8xwSdu18naLHg7lrJ06LxemQjEWDM2OcPxi5UzODZoMCsGZvijr9tuVrNNdvwVenb3VpWz5w1k23lCEJSUgnHESp6E7QkWOm/b+KGvmZY9fsU/FBWNU96OU8jIp5WXAT+KPYz8VUsrrpZT/dZH6eckStmxZuG/++ix9YZnidnz0aAefeU8+97wQZN6TJ1m7r5lgn0nAbzjHrNtvuybjxAdq2LS4cVsDr3WG0waNgMDQBLveZsCHnbPW9JZcmArFmzHDZfKlypks2dHAgGkhEc5e8cYjHWxdnhwNuWVZMVEp8ehwxxW53Px0I/OePMnSnQ18fWFhUtBVebYLjy7oNyXvyHc7173QNHqFh07poVd4xhQ8pbg4jOmbkFLeGX8shNASf8avawqwXXWWtAdXpltLcaWsnZ/rJGLDyEYsMRqyuiITnyEo8BrsW13GjuPd7BxmuLYuL6a9P0rlzxr5Xz8PsnlJgD+tncvhmrLzXmGNmrOmULxNuiL2HnPAb+DWNScABOwE7A0vtbL9thJO3HU5+1eVAZL7X2olaomUUP91+5t5sHIGgBM89dFnTvPpA2foHLToFy40w6C+32Dh9lNUPFnPwu2nqO83lGGbJIxV+/Fa7IKc7wYnaV5gL8T1kd6nePtkiQi6x8WzK0udKtiJBqJwmLsEUo1YebaLQr/BwZpyAGb4dEcRIT5zNS2LzUsCXJbjpqk3Qkmmzod2nnJclit2n6I828XhmtLzdhnGc9bejgtToRiJ+KTpB0tnsXpPE5sWFVFdkcna+bmOQEGuV0vaLwP4uwUz0o6dq/Pd/GntXIQQtPSlymddmedh5Z4GAn7DEUFo7osyy69ksiYDY51abAVeABZgB4hUAJfFfivGmb6IhkvTON0bSUksjQeQJFKe7aIvYjmPt68o4f6X7GTttfuaaQ2luifDJqzYfYpzgyYagmBolACR80TlrCnGC6FpGLpGdUUm5Vn2xGlPfQ9frJzpCBR8+sAZzDTegtZQNGXsVFdk0jVosWxXI/OePMFfPtfsREDGc9uCoSgBv8HD1xc6f+OeF4I0h6RarU0CxvoNlAMPSClfk1I2JP6MZ+cU9n5UMBQlYkn+9hetZBh25OMf187lYE05urDSug59hnBC9b9a15YU2ZjOPTnDZ1BdkUmOR+fuA81pB/xbVQRJzOupv2suh2tGFjZWKMZKPACpoTvCNxcFMGNu+qqKLGqGueRPxhRH4kICB2v+X3tvHh3VdeX7f/atSSoJSUgICSEQg7ETZ2js5w5+tsMQYzzAC6OJkxUHO+70L+3YnfZLXgjt147jtDuhE4ckHlbSaRvTSWewMRjHmDB4CAHHJH7dxA7EMZMBISSBQAipNFTV3b8/7q1SlVRChdFQVT6ftbRUukPpnLr31j5n732+u4bSPA+bFozrpT6yMMUSgNhymVMdURpDEe6bNqrXUpeFJk6cEaS7+Ho9MAdHEd8whHTZQmMowuh8D/WhCD968zQr/roMRGjuiBK2iauEjA56qQh6+ebvT/DE3jMAvLVscsrMxp7uSY8lfG9mJR7ReIC9Z+mOcwkY94fatiNk7DqtTXkOw4USE81eM6eKM51RQHl8dhV5Xuk1K3tg10k2zh9HYyiaJDjwsxvGJpWZaelK7aEYHfTGl8JUBj18+6MVSeLgy68oozTPQwQLsSwzYBtG0jVqecB6EdmBk8ofJzGJxDDweCxhzd5mvjejgrVzq+mI2JzuUm7eeJhV0yviSgkxw1VT5GPV9Aqe2HvGGYEqSfGFUx1R1uxtTnJPPj23mjOdERpCUWpG+OJK/fe+2hg3luMKvZSIWWRqyBxisbRTHdH4/fxvb55m1YwKNs4fR4HPiq/lrA9F8FvdWZHgnPupXx+Ll5mJlZZJFf8tzfNw+5Y66kMRfvixSoLe7pI3PatdrJ9XTVVQ4gLIhqElXaO21/0xDDEWNv80rZywDftPt3NVVSHT3SSPvkSJS/M81BQ5WnheS/m/08rj7piY4oglyv7bLiJiK8t3NLDhYGs8aWTVjAp2n+x0CiNub+DZedXGoBkyjlgC0srXm/jBjAqKAhZfv7Kc2tZIkoTc6uuqKM2zsDV1Fu7EYj87lk5gVJ4n7s7vWTS0PKBJ1SkAnp1XTV1bJKUb8rFZlVQVeI2bfRhIy6ip6tcHuyGG1AhQmmcR9MKHy4N0RLvLXpzqSF02I1aq3ueBP57o7FUEcfFGJ0Psg2Uern/2SNK+27fWsW3h+Hj9tKDHEXA1D6Yh04glIC14vpYfvXmah6aX0dLlYf7zvdP0ty0cz7G2SMrnxSNO0si3Xz/J335oJJeVB3jFLTtT3xYhYitRFUqlI8l1Pik/QpHfn9JQFvgsUz9wmEg7VUdErhORx0XkV+7fVyTIaBkGiRESRhA6osI7LWH2N3cvlI7FvRID3U/PraatK0pnVGmPwMTi1A9daZ6HSB8jVxHhkpEBKv0RCrXDGDRDRpKYgPS1K8s52eEsku55T1cGvYgIk9w6aonPyy9uHMuxVidmtvKaCt5f6uO7/9XExCf2s2xzHac6onTZ0GFbvTIb1bYJuIo7icQSSs4nW9gs5h440vrkRORunFpq+4Dp7uZ24J8HqV0GF7VtAl6I2FDgs3hg18m4IdtV387Du5vYvGA8v/vEBFZNr6A8z8JrWSzf0cCUJ/fH60wlkpjFlWrfwZYurl13mJaoWYJoyGxiwsIRWxGEqJ1sZKZV5vPtj47m2nWHGf/Efh547QSbF4xn322TWT+vmvEjnAXbjaEIy3c00Nyp/Laug2mV+ay8xknZv+apd5ix9jAH2710ePKSDE+q5SqPz66KiyWnky0cy+I0i7kHhnQ/tX8AZqvqt3BUmwDeAi4ZlFYZkigkjNeCtrBNfSjCva828sL8cexYOoFll5awbEsd//OX73DP9gb++0Qn1z97hLunljGtMp8Hdp3stbZtzZwq1uxtJuiVXiPX9fOqmVLsY9OC8UTpPToFM6o0ZB4eS/BZsHrP6aR7+r5po7h1c3fMa8PBVq5/9ghvn+6iOODhqqcOc81TzrNz99Qyvv7aCe6bNopvXFXOsi29q1O81RxJMjyAO1scz9vLnPptMbHwdNdiGhm5gSXdRJERwFH3dWzo4QNMVbwhQG2bkX6Y5BZCvHVzHZ/depxvXj26V52oe19tjK+tWTW9gkXP17JiZyMvL66hy1byPIKtyrc/WkGBT1j79hlWTa+gutBHWb6HpvYIMxMU/XsKDxtxYkMmUuCxscXi8x8uI2zb/GZJDR1RxSO90/tjMa+uBFdl4jNz8cgAUe3txoyl9sdeOzGz8RRqB4V0MMJrESzzJSWUpPNMnFNGzijJnTfpDrG3A1/tse3vcVRGDIPMWfVxuguK/RalAQ+Pzapk5TWj8Vnw0qIa9t92EaumV8SLhELyWrT6UAQROHI2zCdeOMak1Qe4eM0BDrVEuKa6kPEjvBT4hLdOdXLzC8fOOWI0o0pDJhJFqG2Ncu26w9y25TgHz4S5fv0RDrWkdr+3hW2sHgbjcEuYD5QFCNuK35KU53kk+fhQlLin4t3WWItlcfb8X+9G6MCQvlG7G1goIu8AI0TkL8DNgKl8PQQo0BVVOqMw97mjzN1wlOU7GjnRHuV4KILXgjV7m+MGDbrjZrEZXFuXzZx1R+LH1BT56Ira1LdFKA548HusPpcIJAa7jTixIRNpj0o8DX/5FWXx9WglfuGZucku9tXXVTGx2CkOmkhNkY89TZ3c+OwRTrZHUp53rDU5czKxcOi7xcjIDSzppvQfF5G/Bj4CjMdxRf5eVY2/aQiwsdjX3MnFI51MxmmV+b0WfK6dWw0QX2/29E3OWrRV0yt4eHcTK6/pritVU+TjqRvH0h5V7nz5eHzb5gXj+xUeNuLEhkwkcQ3amAJv/DkRsfjGrhP8ePYYxhU6ZWQaQmEKvBZ2HknPRKL7/uYXjrHj5hoem1VJgc+iLWxTEfTwjzsbge7YtK1Kh22BFXjXhW8Tszi7bDkv16WhN+nG1FBVBXa5P4YhJKrKA7tO8subxlJT5GP5FWW9Fnwu2VjLK4tr+NePKpYIP3qjiZsmjuDy8gCXzawkHFW231zDqfYoh1rCnAnbfG7b8aT3WL6jgafnVsdL2aSSxkpcGzQQ8lkGw0DgkW6Fj4qglx1LJzAyYPGPOxvZcLA1SXHnsVmVVATBEuXHs8cwscjPmyc7ernvW8NKZ1Qp8EFnVBkZsPjbD43knsvL6LKVfI+wdFOyjNy7jS0bGbmBI93SM38FrAKmAoWxzTi2zj9IbTO4eESoD0WwoE9tu8MtYTptZW9TJ0dbOvnsB0fS2mVzsCWSpHW3fl41r9a1MW9SUa/32HCwlYdnVvCbJTVEbSVg9V54bUaVhkzEgri2Y8/K8PWhaJKxmlzipyNqU+IXGi1BVeMJVzFqinw0tUdY9Hxt/O+dS8ZTVeBlgVvepueg0Cy2zgzSjan9HNiJs0bt/e7P+9zfhkHGwmbNnCoQeHh3EyMDVsrA8t6mTu7Z3sBNk4o5dCbMifZoL627hc/X8oWpZUxylUd6voeFMlI6CVhKl62cVV/KRafvJiBuMAwWCuR5ems7xhT2Y9QU+ThyNsyNzx6lLWKxfEcjt26u61Xd/SfXV+H3CNMq8xO8EV3xAd2HR+WZ2HKGkq77sRK4z3VBGoYYnwWFPqE1bPPFy8pYvec0Gz8+jsNnw3F//8RiH3keYevC8QjOQm1IndRxrDVCwCM8deNYlm46luQ+KfJEOdBmUvYN2YNYFlHbRuldGT4xDb/GVRQ50+nUE2wIRfiP66vY39zF6HyLx2ZVMqnYj63KZ7cepz4UYefNNUQUogpn1WKEdFGonWAFTGw5QzmfIqGfGsyGGFIjlsXxkNIQinLjs0f56Z+bue3SkZzqjHLny/XxAoXtEeWe3zRw8ZoDHG9zHuS2sJ1yNtYYirBkYy1nwjarplfwypIafrOkhkn5EVqiHpOyb8gqzqqPWc84y2hT3e+leR7eXjaZNXOquPOlem5313h2RW3Odtnc+XI99SGbUXkebttSx4l2x11ZGfRSH4oyY+1hJq/ez9Vrj8SVPkzGYuaSrlH7FvANEdkjIi8l/gxm4wzd68IKfM4odN6kERw+G05SSTjcEmbR87Usu7SEaZX5RBVW7GhgVJ4npZrIytebONwSxm85adDLttTF/1eXnTpeZ9wqhkwltszkdEe4lxvx8dlV3L6ljuvWH+FUh2OsYiLHlgjFAQ+VQS+LN9ZSmufhvmmjCHph3bxqfnJ9FYs3ph7gmcK3mUu67se1wCGcYqHt/Rx7XojIzcD9OPG5j6jq6wn7VgB3AFHg71V1s7v9BuD7gAf4d1e+KyeJPbBdrqZdaZ6HgCe14SnN87D8irK4vE99KMo3ry7n5cWO4vjR1jDLdzgZXonr2FZfV8UnXjhGfSjSZz0p41YxZCqxZSahCNSMEF5eXMORs06dtcSMxveVOur7sRprlUEvX95ez/Irylj0fC3H2pySNWvnVrNmbxP3XF52TqUPk7GYmaRr1KYCZao6GLJYfwIWAT9K3CgilwK3AB8AqoBtInKxu/tR4DqgFviDiDynqjlZ7y32wHoFfnbDWPK9UBJwUpYbQxFWvt6UZKQSF1Dvqm/nY88cYVplPo99rDKerRVb11aR76iTrNjZ/eB/aXs96+dVx0vam5R9Q6YTcwX6PRBR4VBLV1JmIjjP0KEzXczdcDQ+kDvdGWHDwVbuubwsSVl/iVuaqa/STmaAl9mka9R+C1wK7B7oBqjqnwFEerm35gO/UNVO4JCI7MdZ/A2wX1UPuuf9wj02J41a7IEFJ1mkJay9UpYf3t3EfVeW8/O3mrmqqqDXg1gfilAZ9PDy4hqiCqpKoU842BJh7oajSf9vw8FWHplZYVL2DVlDzBXYrAGiCo/uPsXjs6uSxAlWX1fFCnfhdMz9+OPZY+KSWbGF17H9pXkelu9o7PU+69xkKjtyrhb1j1iW6+53Bq7mGRs40jVqh4AtIrIeaEjcoar3DXirHMYCryX8Xetug25x5dj2aed6o3379p3X9kwjP1hAYfVk9jT1Lvh5x7Y6Xpg/jq6o8oWpZTS1R3j6pmpufqE26UG886X6pOrWlQUeuqJ2ypGoHe6kK2JjW16idoTmpuO0h9oGvZ/Zcj3SIVf6ki39yA8WkFc1GUuUu6eW8fDuJlZNr2B00EtVgZdPbjqWJCN3uCVM0GvxzNxqRuZZfGpTXZKEXCz+du+rjTw2q5KLRwY41NLFA6+d4DvTimg+uv+C2toxsprFm7ozjJ+5sZK803X9PmfZcj3S4UL6MmXKlD73pWvUgsBGwA+MS9ie1iRcRLbhLAvoyb2quqGv01JsU1Int5yzHak+gH379p3zg8k0mpR4skgih1vCnO60aQxF+LDfwxdebqAy6OGF+eM40R6lZoSPR//YFFdUiI1SY/I/PUeiv14wjlMRZcHGxHL2E7ikwMaOXODw9Bxk2/U4F7nSl2zqR6vkEQFCEWct57JLSyjN89AYcipX16fQeSzNcwZ2pzui8f0x1/w/7zoBOF6OAp/Fp3/dbRRXTa+4oM+lVQJcvfZocjX6TfXsXDKRau174XY2XY/+GMy+pKv9ePuF/BNVnf0uTqsl2YBWA3Xu67625yRiWVg28RT9njOrUXmeeCn6R2dVku+Fz249TmXQw/dnVvLZD5byuQ+Vcqw1zIqdJ9hV306Bz2JsoZdjrRE2LRiPV5zFq5YoNzyb/MAtfL6WFxfVUO6xjYvEkHGIZRGKQHskQtBn8bUry5Niwk/dODZesinRe1HsFwQPYduOD/IAxhZ4+M70Sh6aDrUJyVUwMDE1U2pmcElXJmsd8B/ARlUdqoUYzwE/E5Hv4iSKTAF+j3PZp4jIROAYTjJJTq+hO6t+QpEoHyxzHsZFCQ/s0zdV8+9/OsXdU8vixQm3Larho1V53HJJCTPWHk6KK/xgRgX/8oeTeAS8luC1nJIza/Y2c/+V5RT7U88G60MR8gp9RgLIkHG0i4+IQmdUKApYjMpzZlOleR5OdUT5+984EZNX3Czg+lCEM51R2iPKqDwPHgse2HUyyXCtml7B1PIAxX4raRY3EElTRhR8cEnX/bgTuA94XESeAn6iqq8ORANEZCHwMFAObBSR3ap6varucf/XXiACfEFVo+45dwGbcVL6n1DVPQPRlkxELIuIDUGfBxv4+VtNvLjISUsuz/fQ1BHhqqqCpNTl0x1R7ppaFjdokOx2XDWjgtOdNjPXJiec3P/aCX4wszLlA9cYilAVDJiRpCGjEMuiLqQsTFDAeXFRTUotRwWW73AqXN+RkAn89Nxqvnl1OR975gjQrULiFx0UnVMjCj64pLX4WlUfUtXLcbQfm4Gfi8h+EblPRCZfSANUdb2qVqtqQFUrVPX6hH0PqupkVb1EVTclbH9BVS929z14If8/02kXH40djgHqjCrf+a/TnGgPc6I9QpetLN54jEXP1yaNMov8FpBcuXdaZT6rplcwucSPJcIDr53olXCy7NISLDTlAtY1e5tN0UJDxnFWfXFXIzj38pe217POvYenVeazcf44tiwcjwh88bLSXhUubt5Yy9jCbiWSmNp/zIC9G51TsSxaJcApDdAqgST9VLNwe3BJV1EEAFXdo6orgE8DbcDXgP8SkW2ukr9hgOmwrXgpmKi7APvHbzZTWeDlK79t4Ombehug5TsaUIT5k5yCCrH6a/dsb+B9aw4wY+1h7p5axrTK/Pj/iY1OBeWiApsXF9WwY+mEeD22+68sNxJAhowjVXxqw8FWLGD1dWN4ZFYld75czyVrDjBz7WGK/I6CSCKHW8JY0i1evH5eNaN9735GJpbFwXYvV689yqQnD3L12qNxea0YRhR88EjbqInIJSLyDRE5APwb8EtgAlABvAA8OygtfI8TtbtnXA/9vybWzq1m8ZQiHnjtBF+YWkpF0BPXb1w1vYJ7X3XqR53tsvnO9Mo+66+lUi+PjU7tSIRyTycTCi2mjgrw6MzRZiRpyEhi8alE5k8qxO8Rxhb6WNJD5mrxxlq+P6Mi6fiaIh9vn+7k0VmV/G5pDZPzIxeU6RuTtjP6qcNDWkZNRF7HiauVAp9S1fer6r+o6lFV7VDV7w5qK9/DBBIe2if2nuHXh85yycgAGw62MmfdEf7S3MU92xuYufZw3A1ZU+SjwGcR9Chr5lTxoT7KZCSql/ccnZqRpCEb6CksPH9SIf80rZybNhzleFukTzm5L18+Euj2bjyw6ySLN9Zi23rB9/o5sxsNg066iSLfAp47l0yWqk4cmCYZEhkhXUmyVZdX5POX053xZA6vwOrrqpIKga6+roq61jDjRjizr7cTjo9RU+SjqsDL7z4xgeNtEcrzLOxI8uVNR/XAKCMYhpNYfOo3S2qI2OC1iCdI9SVzta+5i7umlrF4SjFFfov2iM3yK8pY+XoTXTYXnAxlshuHl3QTRdbGDJo4WLGfwW2eQW2biqCHVxY7Ma5JxX4e2HWSNXMc9X1LhBU7G5NckCt2NhJViNhwujPKA7tO8vjsZLX+tXOruec39Rxvi3DP9gakx9OWTlwgnWMMhsFGbRsvNh5x7vmYMVn5elM8YQSSZ2URG9ojyk0bjnLFz9/hnu0NfPPq0eR5pVdix/liytIML+muU6vCERGeDpT02O0Z6EYZkvFg47WEPI9w8EwXlUEP+R7hsVmVjCnwUh/qLjsPxPXsPALH2yLUhyLc+2pjfO1OW9jmbFeUDQdb+T9XjEqZTuzEBY72igsklqtP5xiDYSgYIWFO2AG8CbOkXfXtFPslvrA6ptpfH4rgtehVJfv2rXVsWzieL/+2kfuvLH/XceTE7Eajnzr0pDsc+RHQBVwLtAKX4yyO/vwgtcuQQFCidEaFsYUePlTm56HplSzddIy5G47ymc11vWZhsRpqAQ+s2dvM47OrqAw6Yw+vJUwu9vPTP5+hpsjHuEJvyoc3nbiAiR0YMgW1bfI8SnvETnoefvjGaSqCXpZtqWPR87XUhyI8M7cav5X63m1oj7Ls0pILTuwwMenhI92Y2lXAeFVtExFV1T+KyB3Aq8CPB695BrEsDrRZRDWC3/JSH7IpCnSrfsREV1dNr+DDo/KwBBTFbzm6df/60QpQ5b4ry5OUSH5yfRX3X1lOxFbOWj5GWMkjyXTiAiZ2YMgkvKJ4LYuHdzcmKYrsPNYar1BhqxKxbbrs1PduYyjCmAIvq6ZX0GFbYAXMLCvLSHemFsVR9QBoFpFynHVqY/s+xTAQxNKDC30eIgoP/v4EKOxYOoF186qZVpnPrvp27tnewBsnO5i0ej+TVx+gIwptYeVYa5jDrZG4QQNnRHrr5jrebOpk0pMHuHrtUerCPlqsfE5qHmckn2Kv3W9cwMQODJlE2Aa/2HztyvJ4RvA92xv4wKggn9x0jNnrDrOnqROPZXGm05mx9awKv2ZvMyMDHu7Z3sBFT+43ceIsJN2Z2i7gJpzK15tx1qi1A6+f6yTDhRN38Qm0R2zunlrG9c8eSdJ+fOrtZm6YUBSvB+U8qMKXf9vIo7MqGOH3pHS1lOY5LsnKoJfjbVFu35pQCmNuNZeM0HPGBUzswJApiGURtgEsKoKwdeF46toc1R1LlJXXjOZUR5SJRT6OnA0zudjH6Y5oPN7WFrYJeoUHrxrN8h0NJk6cxaQ7/LgVeMV9/Q/ASzgVq3NaSDgT8FtCTZGPqK2ISG+Jnxdq+fyHy9hzMhRfo/b0TdV8eXs93/7oaEbmeYhq7wWq3XJasPyKsl5B88UbazkV8fYbFzCxA0Mm0C5+TnY4BXT3NYepbQ1T5LeYWOSnutCHrcqavc3YwJZ3zmIhLN7oxKVnrj3M3A1HufmFYxT6rXiZphgmTpxdnNOoiUhQRP4FR6H/iyISUNV2Vf1nVV2uqseHppnvXbyWsvq6KlbvOY2vj+B2VJX5FxXz+icdWStLlA0HW7l1cx0eEVTtXskkj8+uoj3iGKDSvNQzubCxT4Ysod0Wbt5YS2XQS3Whh5KAh4XP1zLlyf1ct/4IIPzjX4/igddO8DcfLKUzqinv+VBEUw4Aje5p9tDfTO0R4H8BbwFLgO8MeosMSYQisGJnI1dVFcRnbYnUFPnY09TJjLWHae50RqNHzjrhz8MtYWpbI7RF4NfvtCStZXt4dxMNoSjQXaet5/v6TBjBkCVEbceN/uBVo6ltjfYSOb59ax3tUeVfrh5NngeOtIZT3vONoUivAeB6EyfOKvr72roRmKOqX3Ffzxv8JhkSiWUxLnq+lqimVtBf+XpTXM9x5TUVrHy9Kb6/MRTh5o21/M0HS5OC51+5YhSXjPTxypIaLisP9Fqk+szcakZ6zINsyA78Hrhv2iju2FbH6KA35SysMuilK6qc6rT5wEhfr3t+/bxqKoIeHt7dxKrpFexYOoEXF9VwUYEpjptN9JcoUhBzMarqUREpHoI2GRKIZRje/9oJoipMGOFh26IabFX2NHUm1VE73BKmpcuOx9Yen13Fva82OnJaFmxbOJ6wOtV8//f2BlZeM5plW+rYuWQcUwpsti+pIWyDz4KRnvAFiboaDENJiRVmSomfwy1hPJI6Xf/AmS4mFPm4acNRti4cz8iAh18vGI/Hrfpe4nGSnB6dOToh8akTO2IMWjbRn1HzisgsutXQev6Nqr40WI0zdGcY/mBmJQ/vbuJT7yvhZ281c+dflaUshDgq38OOpRNodFVEYgbuL6e7CHispG1tYTuegm9HbIqJOFdWwTb2zJBF2JEIQa+XmiIfx1rDPDO3msUbu9dlxgZ435vt99s4AAAW30lEQVRRweGWMDYw65nuIrnPzqumON+ZkRXSGX8OTNHO7KM/o9YIPJHwd1OPvxWYNNCNMiSjtk1Uba6qKojHCn5b18Hjs6vi2ZA1RY47pTNqk++VuMFLfKDrQxFWTa/gnu0NrJ9XTVVQyFeTgm/IDUbQxbPzqvnPt5r54mVlKeWxjrdFnFlbc5dJ289RzmnUVHXCELXD0A9+i16xAkuULQvH4xHBa8HxtjB3vtTIDz9WyYuLajjR7jzEiS7KD4/KY+eS8YyQLjRqG+EPQ86gtk11gbD0khLuermeu6eWsWxLXdLg7uHdTk3Cu16uTzr3cEuYLjVp+7lAuouvDcPMCAlTGQzEi3k+eNXopHIzsQf2m1ePpihg0RW1+dYfTiatuakp8pFnOevKssGtYsraGM6XtqjFzRsdt2J9KMqq6RWMDnqpKvACyvdmVnIiFKY+lOxfryny4REx8m45gEnazhLUtin2OdmPsSyvyqCXdfOqWTOnis6ozRcvK+X2rXWEo9DUYfO9mZXMn1QIZJ+ElSlrYzhfxLKSSs/sqm9n0fO1XPPUOxw5G2bWM0fctWjw9E1je2URWyhiWbRKgFMauOASNIbhwczUsgolzytMKvbHZ2uJMbW1c6upDHo52RHlmqfeiacpPzyzAgun4Gi2zHRMWRvD+XJWfZxsj6TMfDzVEY1vW7aljleW1LBmThWVBV6OnA3z8O4mfvSx0RwMeeP3XWwg+G5L0BiGBzMMySLaohY3PnuUP5/qjM/WEr/0l2ys5b5po2gMdS++Xvh8La0ROBvJLr+KKWtjOF+6bKdCRaz0EiSv5Uw0bhEblu9o5Pr1RwhH1a1YISzosWj7QkvQGIYeY9SyiKg60j4rX29iUrE/5Zf+5GJ/fPF1bNupjihtYaUti9wpsbI2iRi5IsO58FtQEvCyYmcjP549hrc+M5nHZlXGMx8TjVvYVn4wo4LKoJf3jfQzKd8RPzYDqewnO77hDIhloerIZO2qb+doHzI/9aFIPNMxtq0xFGHxxlr++0Rn1sSlTFkbw/kyQsLkeYT6UIQ5646wbEsdnVHloekVbFowPsm4rdjRQFtE+c5HRxOwFLVtM5DKETL/280AOPGCL22vj+vS/dOrJ3q5WZ6dV03QK0nb1sypoiRgsWZOFReV+Ln/tRO93CmZGBxPLGtz8LbJ7FwyzsQ2DOdEbZt8T7f7MVZn0FZlhE94aHoFq6ZXcO+rjWw42MrtW+uoLvTFB0pmIJUbmESRLKHLhg0HW6kPRdm2aDx+S/AIvLy4hi5b8QgU+YSP/+oYL8wfx+lOm1DEJt8jLN2UnPqv3YIw8SzDTAyOG3UHw/mSr12MKfAl1UkrzfPQEHKSpxI53BLGVuL3uakPmBsM/5DckBaJrpGwrRw4E+bqpw8zafV+rl9/hONtEcIKlUEPn916nI6IEo4qSzcdSwp837GtDjvBqMUqa5vguCEXEMsi4LGYVOxnTIGXIr9FKGxTHLBSuhYDPVyLpj5g9mOMWpYQc42svGY0obBNe8RmzZwq1s1z0vhv3VxHVxT+aVo5lUEP977ayOSS1MkkdsKUx2QZGnIFsSz2t1nMeuYw7/+PA8xZfwS/JYQiSlThxUU1KdZtdg1zqw0DjXE/ZhHFAaE830tDu82dL9f30nbsjCqLN9ayfUkNUVvxuPXXeq7ZiaogHispON7zGL+lRl3BkFWcVR8LE9Y2Vga9tEU0SXln/bxqHplZgWBci7nKsM/UROTbIvKWiLwhIutFpCRh3woR2S8ifxGR6xO23+Bu2y8iXx2elg8tZ9XHn085M6hFPdyFd2yr475pozjaGo5Xwi6VDkqkM2X9tS9tr4+7F01w3JAr9PQ6LL+iLG7QoHvdpqDGtZjDZMJMbSuwQlUjIrISWAEsF5FLgVuADwBVwDYRudg951HgOqAW+IOIPKeqe4eh7UNGlw0FPotwH2tpppT4uXVzXZKGndo25XnCqukVlOZ54mrlu+rbWTW9AsQExw25Q0+vw5iC1MVCE4WL+9MXNfqj2cewGzVV3ZLw52vAEvf1fOAXqtoJHBKR/cBH3H37VfUggIj8wj02p42a34K2sE1UiYsaL7+ijNI8D21hG69bIfvx2VVY0u06FEhZdy3RvWiyDA25QMzrEEt8Kg54UrrWY4O+/jJ/Mzkz2NA3ohn0DSYivwJ+qao/FZFHgNdU9afuvseBTe6hN6jq37jbbwWmqepdie915syZeMf27ds3JO0fTPKDBUj5eFQsEKExFE2KFaybV82Zzijf/+9TfOejFXQeP0h7qI38YAEdI6tZvKk7BvfMjZXkna6lPdQ23N0yGAaU/GABBVUTORayGVPg4dCZSJI+6uOzq7hoBJw48GdKxl3E7I0nehm9bXPLaT66v9/9huFjypQp8dfFxcVJWW1DMlMTkW1AZYpd96rqBveYe4EI8J+x01Icr6SOA57TMid+ADH27duXcnsmI5ZNu3joUou5G5LFfhc9X8tjsyq5e2oZX/5tA4/OnEi1drrn0du9GKwazq70IhuvR1/kSl+ytR9ihWn2ennrVBf/9ubpJPf7w7ubeHTmaKZMmcIpDaR0T3oC+e7+vHPuH2qy9XqkYjD7MiRGTVVnn2u/iCwD5gHXavfUsRYYl3BYNVDnvu5re06jtk0enYT6eBgnFvu5fUtdUswsdp5xLxreK8TixGOCPr52ZXm8WnxiEpRq7xgcdLvmRSzsaOrsYZMZnNlkQvbjDcBy4OOqGkrY9Rxwi4gERGQiMAX4PfAHYIqITBQRP04yyXND3e7hxG9JyoWkPgu+cVU5O5ZOwGNJRshdGQzDgdo2edFOJudH2Da3PKXUWs/M3/mTCnlxUQ1dttCsAX74RlNclg6ILwkwmcGZzbAnigCPAAFgq4iAE0f7vKruEZGncBJAIsAXVDUKICJ3AZsBD/CEqu4ZnqYPD17L0bdLjKmtvq4Kj8Dnth1/V0Ftk+VlyAV63ceEaT6633F19fBSJGb+KsKJDptr1x1Oir/97K3mJPdleZ5lnosMZ9iNmqpedI59DwIPptj+AvDCYLYrkwlFYMXOxqSHbcXORh6aXvGuimqaLC9DLtDXfZwfLOjznJhrvlUCcTcldK//XDW9gkXP1wLOTG3nknF9vpchMxh2o2Y4f/xu+n7sYYPuEjOJxOWu+lG8MlWmDblAX/fxtrljgNgszk+nDR5LyLNs8tXxSPQlFzc66HxF9ozHGTIXE3TJQlKpgDx9UzVr9jYnHZduLSij/2jIBfq6j9Xjjc/irl57hMlPHmDG2sPsPR2lLuxDLKvPWmrjCr2m9FGWYYxaFhKLBexaOp5Dt1/ErxeMpytqc+9HRvWSuyryRPutlWaKIxpygb7uY4lGUlajuH1rHQfPhDmrvj7l4krEKPZnG8b9mMUcD9nxBzWWmfW7pTWEIuCzIOixOdBm9RsrK/JEWT+vus/UZ4MhG+ipKBK7jztPvoOnamLKWVyBz6LLFlSMXFyuYIxalhKLH1xbHeRL/6MMjyXYCrWtYW5+oY7HZ1cR8MCnN9edM1YmlsWBNouvv3aCVdMrGB30Uhn0MtoXxo6YB9qQPfSlY/p2qI2SPtaktYXt+Lozs54zNzBGLUvpsuHa6iB/91el3LSheyb2zNxqrq0Ocse2OrYsHN93rMwNlyUG1zccbAW6s7wKifT8twZDRtOXYUo1i1t9XRVjCjzGI5FjGKOWJfRcfxP0wJevGMWNzx5Jmokt3ljLC/PH8cTeM3Hx43MpIpwzScTkiRhyhO5Z3PiU2Y+G3MEkimQB3ZlbR5n05EGuXnuU4yHFZ0lqbTpXcaS2Nczq66p6Bb8TFRFMkojhvYLaNoXaQZl0UKLt5EVN8kcuYoxaFpAqc2vB87X4+jBItsLjs6t4dPcpxhR42LlkfJ9pyaZIqMFgyCWM+zEL6MtFGLCUZ+ZWs3hjbVJMrSwgjPB6eXTm6O4Mrj6C36ZIqMFgyCWMUcsC+lITj9pKcVs925fUELadNP6RnjB2pIuAe9y5AuDxOF3U+R9lni7Utk3Q3GAwZC3G/ZgFnMtF2HyqiWJtZ5S0U6zt2JH0MhZTxekOtnuNsr/BYMhqzEwtC0jlIizyRGmJ+iiqeR+t4j1vl6HRezQYDLmIMWpZQuL6GxGLA20XpqpvUvkNBkMuYnxNWUhf2ZBn1RFn7U/rEUwqv8FgyE2MUctC+pxlqaQdJzOp/AaDIRcx7scspK9sSI9IyhlcqjiZSeU3GAy5iJmpZSF9zbIs7POqi+YoLJjSGgaDIXcwM7UsJHGWFeqKEPQ72Y9n1dev1qPBYDDkMmamlqXEZlln3nkrPssycTKDwfBex8zUcggTJzMYDO91jFHLMUyhQ4PB8F7GuB8NBoPBkDMYo2YwGAyGnMEYNYPBYDDkDMaoGQwGgyFnEM3RTIIzZ87kZscMBoPBEKe4uDhJXcLM1AwGg8GQMxijZjAYDIacIWfdjwaDwWB472FmagaDwWDIGXLaqIlIqYhsFZF97u+RKY6ZJSK7E346RGSBu+9JETmUsG/q0PcivX64x0UT2vpcwvaJIrLLPf+XIuIfutYntS+d6zFVRH4nIntE5A0R+UTCvmG9HiJyg4j8RUT2i8hXU+wPuJ/vfvfznpCwb4W7/S8icv1QtrsnafTjf4vIXvfzf1FEahL2pbzHhos0+nKbiJxIaPPfJOxb5t6L+0Rk2dC2vFc7++vHqoQ+vC0izQn7MuaaiMgTItIoIn/qY7+IyA/cfr4hIpcn7BuY66GqOfsD/CvwVff1V4GV/RxfCpwCgu7fTwJLsqUfQGsf258CbnFf/xD4u0ztB3AxMMV9XQUcB0qG+3oAHuAAMAnwA38ELu1xzJ3AD93XtwC/dF9f6h4fACa67+PJ4H7MSngG/i7Wj3PdYxncl9uAR1KcWwocdH+PdF+PzNR+9Dj+buCJDL0m04HLgT/1sf8mYBOOkN+VwK6Bvh45PVMD5gNr3NdrgAX9HL8E2KSqoUFt1flzvv2IIyICfAxY+27OH2D67Yeqvq2q+9zXdUAjUD5kLeybjwD7VfWgqnYBv8DpTyKJ/VsLXOt+/vOBX6hqp6oeAva77zcc9NsPVX054Rl4Dage4jamSzrXpC+uB7aq6ilVPQ1sBW4YpHb2x/n245PAz4ekZeeJqm7HmRj0xXzgP9ThNaBERMYwgNcj141ahaoeB3B/j+7n+FvofbM86E6TV4lIYDAamQbp9iNPRF4XkddiLlSgDGhW1Yj7dy0wdnCb2yfndT1E5CM4I9cDCZuH63qMBY4m/J3qc4wf437eZ3A+/3TOHSrOty134IysY6S6x4aLdPuy2L1n1orIuPM8dyhIuy2uK3gi8FLC5ky6Jv3RV18H7HpkvUq/iGwDKlPsuvc832cM8CFgc8LmFUA9zhfrvwHLgQfeXUv7/f8D0Y/xqlonIpOAl0TkTaAlxXGDlvI6wNfjJ8AyVY3Vzhmy65GqSSm29fwc+zomnXOHirTbIiKfBq4AZiRs7nWPqeqBVOcPAen05VfAz1W1U0Q+jzOT/lia5w4V59OWW4C1qhpN2JZJ16Q/Bv0ZyXqjpqqz+9onIg0iMkZVj7tfko3neKulwHpVjVfUjM0qgE4RWQ18eUAanYKB6IfrrkNVD4rIK8BlwDM4U3yvO3uoBuoGvAPdbbjgfohIEbAR+L+uiyL23kN2PVJQC4xL+DvV5xg7plZEvEAxjismnXOHirTaIiKzcQYiM1S1M7a9j3tsuL5A++2LqjYl/PljYGXCuTN7nPvKgLcwPc7n/rgF+ELihgy7Jv3RV18H7HrkuvvxOSCWRbMM2HCOY3v5qd0v3lhcagGQMqNnCOi3HyIyMuaOE5FRwNXAXnWisC/jxAv7PH+ISKcffmA9jt/96R77hvN6/AGYIk4mqR/ny6Vnplli/5YAL7mf/3PALeJkR04EpgC/H6J296TffojIZcCPgI+ramPC9pT32JC1vDfp9GVMwp8fB/7svt4MzHH7NBKYQ7KXZihJ595CRC7BSaL4XcK2TLsm/fEc8Bk3C/JK4Iw7WB246zHc2TKD+YMTz3gR2Of+LnW3XwH8e8JxE4BjgNXj/JeAN3G+PH8KFGZqP4Cr3Lb+0f19R8L5k3C+RPcDTwOBDO7Hp4EwsDvhZ2omXA+czK23cUbB97rbHsD58gfIcz/f/e7nPSnh3Hvd8/4C3Dgcn/959GMb0JDw+T/X3z2WwX35JrDHbfPLwPsSzv2se632A7dncj/cv+8HvtXjvIy6JjgTg+PuM1yLE5P9PPB5d78Aj7r9fBO4YqCvh1EUMRgMBkPOkOvuR4PBYDC8hzBGzWAwGAw5gzFqBoPBYMgZjFEzGAwGQ85gjJrBYDAYcgZj1AyGYUBExotIq4h43L9fkQQF+SFqQ6urQpFq320ismOA/s877mJug2HQMUbNYEjA/QJud7/wYz+PDPT/UdUjqlqoyXJHfbXpfhEJu21pFpFXReR/DkAbClX14IW+j8GQSRijZjD05n+5X/ixn7uGu0E45V8KgVE4i4if7ud4g+E9iTFqBkOauC65nW6FgGYROSgiV7nbj4pTHHFZwvFzReS/RaTF3X9/wr4JIqKuRmTaqKPf+Z/AWBEpd9+rWEQeF5HjInJMRP45wa15kYj8RkTOiMhJEfllQhtURC5yX5eJyHNuW38PTD5XWxPdpSIyWUReEpEm93/8p4iU9PEZfkQcRfkWVwv0u+fTf4OhP4xRMxjOj2nAGziSXz/DqX3118BFOBJfj4hIoXtsG/AZoASYC/ydXGBpEFcb8DNAE3Da3bwGiLhtuAxHNy8Wn/sGsAVHM7AaeLiPt34U6ADG4MgVffZ8moUjR1UFvB9HsPb+Po79PvB9VS3CMZxPncf/MRj6xRg1g6E3z7ozsdjP5xL2HVLV1W4s7Jc4X+APqFMAdAvQhWNcUNVXVPVNVbVV9Q0cXbwZPf9ZmiwVkWagHfgcTgXwiIhUADcC/6CqbeoIEK/CEcUFR4OvBqhS1Q5V7ZX84c7qFgP3ue/xJ7qLnfaLqu5X1a3uZ3AC+O45+hkGLhKRUaraqglVGAyGgcAYNYOhNwtUtSTh58cJ+xoSXrcDqGrPbYUAIjJNRF4WkRMicgZH2HXUu2zTU6paAlTgCDr/D3d7DeADjseMMI7CfqwA61dwZlK/F5E9IpJqBlaOU4YqsUjj4XQbJiKjReQXruuzBUdsuq9+3gFcDLwlIn8QkXnp/h+DIR2MUTMYBo+f4ZTaGKeqxcAPSV0MMW1U9STw/wH3u2VVjgKdwKgEI1ykqh9wj69X1c+papV73mOxOFoCJ3Dcl4l1rsYnvG5zfwcTtiUWgv0mTkHHD7tuxU/31U9V3aeqn8QxuiuBtSJSkG7/DYb+MEbNYBg8RgCnVLVDRD4CfGog3lRV38KpNfUVdWpRbQEeEpEiEbHcxI0ZACJys4hUu6eexjE+0R7vFwXW4RjKoIhcSnddOFyX4jHg0yLicWd7kxPeYgTQCjSLyFjg//TVdhH5tIiUq1PNvNnd3O+yBoMhXYxRMxh686se69TWv8v3uRN4QETOAvcxsEkR3wb+VkRG4ySO+HGKQ54G1uIkfICTxLJLRFpxZo1fVNVDKd7vLhy3aT3wJLC6x/7P4RirJuADwKsJ+74OXA6cwalYvu4c7b4B2OO25/vALarakUZ/DYa0MPXUDAaDwZAzmJmawWAwGHIGY9QMBoPBkDMYo2YwGAyGnMEYNYPBYDDkDMaoGQwGgyFnMEbNYDAYDDmDMWoGg8FgyBmMUTMYDAZDzmCMmsFgMBhyhv8fH0m1bgAy4uoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.scatterplot(\"res_email\", \"res_payments\", data=residuals)\n",
    "plt.plot(np.linspace(-0.7, 1), model_treatment.params[0] + np.linspace(-1, 2) * model_treatment.params[1], c=\"C1\")\n",
    "plt.xlabel(\"Email Residuals\")\n",
    "plt.ylabel(\"Payments Residuals\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As I've said, we did this for pedagogical reasons. In practice, you can simply add the controls to the regression model together with the treatment and the estimates will be exactly the same."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "        <td></td>          <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th>    <td>  490.8653</td> <td>    9.715</td> <td>   50.527</td> <td> 0.000</td> <td>  471.820</td> <td>  509.911</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>email</th>        <td>    4.4304</td> <td>    2.130</td> <td>    2.080</td> <td> 0.038</td> <td>    0.255</td> <td>    8.606</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>credit_limit</th> <td>    0.1511</td> <td>    0.008</td> <td>   18.833</td> <td> 0.000</td> <td>    0.135</td> <td>    0.167</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>risk_score</th>   <td>   -8.0516</td> <td>   38.424</td> <td>   -0.210</td> <td> 0.834</td> <td>  -83.379</td> <td>   67.276</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_2 = smf.ols('payments ~ email + credit_limit + risk_score', data=data).fit()\n",
    "model_2.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To wrap it up, anytime we have a control that is a good predictor of the outcome, even if it is not a confounder, adding it to our model is a good idea. It helps lowering the variance of our treatment effect estimates. Here is a picture of what this situation looks like with causal graphs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"443pt\" height=\"116pt\"\n",
       " viewBox=\"0.00 0.00 443.45 116.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 112)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-112 439.4523,-112 439.4523,4 -4,4\"/>\n",
       "<!-- X -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>X</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">X</text>\n",
       "</g>\n",
       "<!-- Y -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>Y</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"63\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"63\" y=\"-13.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Y</text>\n",
       "</g>\n",
       "<!-- X&#45;&gt;Y -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>X&#45;&gt;Y</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M35.7146,-72.5708C39.9597,-64.0807 45.1536,-53.6929 49.8663,-44.2674\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"53.024,-45.7782 54.3657,-35.2687 46.763,-42.6477 53.024,-45.7782\"/>\n",
       "</g>\n",
       "<!-- T -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>T</title>\n",
       "<ellipse fill=\"none\" stroke=\"#ffd700\" cx=\"99\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"99\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">T</text>\n",
       "</g>\n",
       "<!-- T&#45;&gt;Y -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>T&#45;&gt;Y</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M90.2854,-72.5708C86.0403,-64.0807 80.8464,-53.6929 76.1337,-44.2674\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"79.237,-42.6477 71.6343,-35.2687 72.976,-45.7782 79.237,-42.6477\"/>\n",
       "</g>\n",
       "<!-- email -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>email</title>\n",
       "<ellipse fill=\"none\" stroke=\"#ffd700\" cx=\"174\" cy=\"-90\" rx=\"30.0018\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"174\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">email</text>\n",
       "</g>\n",
       "<!-- payments -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>payments</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"273\" cy=\"-18\" rx=\"43.9992\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"273\" y=\"-13.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">payments</text>\n",
       "</g>\n",
       "<!-- email&#45;&gt;payments -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>email&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M193.0882,-76.1177C207.2511,-65.8174 226.837,-51.5731 243.0738,-39.7645\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"245.184,-42.5576 251.2128,-33.8453 241.0668,-36.8964 245.184,-42.5576\"/>\n",
       "</g>\n",
       "<!-- credit_limit -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>credit_limit</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"273\" cy=\"-90\" rx=\"51.2329\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"273\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">credit_limit</text>\n",
       "</g>\n",
       "<!-- credit_limit&#45;&gt;payments -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>credit_limit&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M273,-71.8314C273,-64.131 273,-54.9743 273,-46.4166\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"276.5001,-46.4132 273,-36.4133 269.5001,-46.4133 276.5001,-46.4132\"/>\n",
       "</g>\n",
       "<!-- risk_score -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>risk_score</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"389\" cy=\"-90\" rx=\"46.4046\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"389\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">risk_score</text>\n",
       "</g>\n",
       "<!-- risk_score&#45;&gt;payments -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>risk_score&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M364.3994,-74.7307C347.4821,-64.2303 324.814,-50.1604 306.2852,-38.6598\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"307.9074,-35.5473 297.5652,-33.2473 304.2158,-41.4948 307.9074,-35.5473\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.dot.Digraph at 0x1a1e7dd198>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = gr.Digraph()\n",
    "g.edge(\"X\", \"Y\"), g.edge(\"T\", \"Y\")\n",
    "g.node(\"T\", color=\"gold\")\n",
    "\n",
    "g.node(\"email\", color=\"gold\")\n",
    "g.edge(\"credit_limit\", \"payments\")\n",
    "g.edge(\"risk_score\", \"payments\")\n",
    "g.edge(\"email\", \"payments\")\n",
    "\n",
    "g"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mostly Harmful Controls\n",
    "\n",
    "As a second motivating example, let's consider a drug test scenario with 2 hospitals. Both of them are conducting randomised trials on a new drug to treat a certain illness. The outcome of interest is days hospitalised. If the treatment is effective, it will lower the amount of days the patient stays in the hospital. For one of the hospitals, the policy regarding the random treatment is to give it to 90% of its patients while 10% get a placebo. The other hospital has a different policy: it gives the drug to a random 10% of its patients and 90% get a placebo. You are also told that the hospital that gives 90% of the true drug and 10% of placebo usually gets more severe cases of the illness to treat. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>hospital</th>\n",
       "      <th>treatment</th>\n",
       "      <th>severity</th>\n",
       "      <th>days</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>29.686618</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>20.050340</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>20.302399</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10.603118</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.332793</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   hospital  treatment   severity  days\n",
       "0         1          1  29.686618    82\n",
       "1         1          1  20.050340    57\n",
       "2         1          1  20.302399    49\n",
       "3         0          0  10.603118    44\n",
       "4         0          0   8.332793    15"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hospital = pd.read_csv(\"./data/hospital_treatment.csv\")\n",
    "hospital.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since you are dealing with randomized data, your first instinct is to simply run a regression of the outcome on the treatment."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th> <td>   33.2667</td> <td>    2.662</td> <td>   12.498</td> <td> 0.000</td> <td>   27.968</td> <td>   38.566</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>treatment</th> <td>   14.1533</td> <td>    3.367</td> <td>    4.204</td> <td> 0.000</td> <td>    7.451</td> <td>   20.856</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hosp_1 = smf.ols('days ~ treatment', data=hospital).fit()\n",
    "hosp_1.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But you find some counterintuitive results. How can the treatment be increasing the number of days in the hospital? The answer lies in the fact that we are running 2 different experiments. Severity is positively linked with more days at the hospital and since the hospital with more severe cases also gives more of the drug, the drug becomes positively correlated with more days at the hospital. When we look at both hospital together, we have that \\\\(E[Y_0|T=0]>E[Y_0|T=1]\\\\), that is, the potential outcome of the untreated is, on average, higher than that of the treated because there are more untreated in the hospital with less severe cases. In other words, severity acts as a confounder, determining the hospital the patient goes and, hence, the probability of receiving the drug. \n",
    "\n",
    "There are 2 ways of fixing that. The first one, which defeats the purpose of using data from both hospitals, is to simply look at the ATE in each hospital individually."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th> <td>   30.4074</td> <td>    2.868</td> <td>   10.602</td> <td> 0.000</td> <td>   24.523</td> <td>   36.292</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>treatment</th> <td>  -11.4074</td> <td>   10.921</td> <td>   -1.045</td> <td> 0.306</td> <td>  -33.816</td> <td>   11.001</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hosp_2 = smf.ols('days ~ treatment', data=hospital.query(\"hospital==0\")).fit()\n",
    "hosp_2.summary().tables[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th> <td>   59.0000</td> <td>    6.747</td> <td>    8.745</td> <td> 0.000</td> <td>   45.442</td> <td>   72.558</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>treatment</th> <td>  -10.3958</td> <td>    6.955</td> <td>   -1.495</td> <td> 0.141</td> <td>  -24.371</td> <td>    3.580</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hosp_3 = smf.ols('days ~ treatment', data=hospital.query(\"hospital==1\")).fit()\n",
    "hosp_3.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this case, we did get an intuitive result of the ATE. It looks like now the drug is in fact lowering the amount of days at the hospital. However, since we are looking at each hospital individually, there are not enough data points. As a consequence, we are unable to find statistically significant results.\n",
    "\n",
    "The other approach, which leverages the power of regression, is to control for severity by including it in the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th> <td>   11.6641</td> <td>    2.000</td> <td>    5.832</td> <td> 0.000</td> <td>    7.681</td> <td>   15.647</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>treatment</th> <td>   -7.5912</td> <td>    2.269</td> <td>   -3.345</td> <td> 0.001</td> <td>  -12.110</td> <td>   -3.073</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>severity</th>  <td>    2.2741</td> <td>    0.154</td> <td>   14.793</td> <td> 0.000</td> <td>    1.968</td> <td>    2.580</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hosp_4 = smf.ols('days ~ treatment + severity', data=hospital).fit()\n",
    "hosp_4.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The question that arises next is, should we also include hospital in the model? After all, we know that hospitals cause the treatment right? Well, that is true, but once we've controlled for severity, hospital is no longer correlated with the outcome number of days hospitalised. And we know that to be a confounder a variable has to cause both the treatment and the outcome. In this case, we have a variable that only causes the treatment.\n",
    "\n",
    "But maybe controlling for it lowers the variance, right? Well, not true again. In order for a control to lower the variance, it has to be a good predictor of the outcome, not of the treatment, which is the case here.\n",
    "\n",
    "Still, we might want to control it right? It can't hurt... Or can it?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>         <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th> <td>   11.0111</td> <td>    2.118</td> <td>    5.198</td> <td> 0.000</td> <td>    6.792</td> <td>   15.230</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>treatment</th> <td>   -5.0945</td> <td>    3.492</td> <td>   -1.459</td> <td> 0.149</td> <td>  -12.049</td> <td>    1.861</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>severity</th>  <td>    2.3865</td> <td>    0.195</td> <td>   12.251</td> <td> 0.000</td> <td>    1.999</td> <td>    2.774</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>hospital</th>  <td>   -4.1535</td> <td>    4.413</td> <td>   -0.941</td> <td> 0.350</td> <td>  -12.943</td> <td>    4.636</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hosp_5 = smf.ols('days ~ treatment + severity + hospital', data=hospital).fit()\n",
    "hosp_5.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Surprisingly, it can hurt! \n",
    "\n",
    "![img](./data/img/beyond-conf/shocked.png)\n",
    "\n",
    "Adding hospital on top of severity as a control induced MORE variance to our ATE estimator. How can that be? The answer lies in the formula for the standard error of the regression coefficient.\n",
    "\n",
    "$\n",
    "\\hat{\\sigma}^2 = \\dfrac{1}{n-2} \\sum( y_i - \\hat{y}_i )^2\n",
    "$\n",
    "\n",
    "$\n",
    "\\text{Var}(\\hat{\\beta}_2) = \\dfrac{\\sigma^2}{\\sum(x_i - \\bar{x})^2}\n",
    "$\n",
    "\n",
    "From this formula, we can see that the standard error is inversely proportional to the variance of the variable \\\\(X\\\\). This means that, if \\\\(X\\\\) doesn't change much, it will be hard to estimate its effect on the outcome. This also makes intuitive sense. Take it to the extreme and pretend you want to estimate the effect of a drug, so you conduct a test with 10000 individuals but only 1 of them get the treatment. This will make finding the ATE very hard, we will have to rely on comparing a single individual with everyone else. Another way to say this is that we need lots of variability in the treatment to make it easier to find its impact. \n",
    "\n",
    "As to why including hospitals in the model increases the error of our estimate, it is because it is a good predictor of the treatment and not of the outcome (once we control for severity). So, by predicting the treatment, it effectively makes it so that it's variance is lower! Once again, we can resort to partitioning our regression above into it's 2 steps to see this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "        <td></td>           <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th>     <td> 2.498e-14</td> <td>    0.827</td> <td> 3.02e-14</td> <td> 1.000</td> <td>   -1.646</td> <td>    1.646</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>res_treatment</th> <td>   -5.0945</td> <td>    3.447</td> <td>   -1.478</td> <td> 0.143</td> <td>  -11.957</td> <td>    1.768</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_treatment = smf.ols('treatment ~ severity + hospital', data=hospital).fit()\n",
    "model_days = smf.ols('days ~ severity + hospital', data=hospital).fit()\n",
    "\n",
    "residuals = pd.DataFrame(dict(res_days=model_days.resid, res_treatment=model_treatment.resid))\n",
    "\n",
    "model_treatment = smf.ols('res_days ~ res_treatment', data=residuals).fit()\n",
    "\n",
    "model_treatment.summary().tables[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Treatment Variance 0.234375\n",
      "Treatment Residual Variance 0.05752909187211906\n"
     ]
    }
   ],
   "source": [
    "print(\"Treatment Variance\", np.var(hospital[\"treatment\"]))\n",
    "print(\"Treatment Residual Variance\", np.var(residuals[\"res_treatment\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Also, don't take my word for it! You can check that the SE formula above is true:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SE of the Coeficient: 3.4469737674869028\n"
     ]
    }
   ],
   "source": [
    "sigma_hat = sum(model_treatment.resid**2)/(len(model_treatment.resid)-2)\n",
    "var = sigma_hat/sum((residuals[\"res_treatment\"] - residuals[\"res_treatment\"].mean())**2)\n",
    "print(\"SE of the Coeficient:\", np.sqrt(var))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So the bottom line is that we should add controls that are both correlated with the treatment and the outcome (confounder), like the severity in the model above. We should also add controls that are good predictors of the outcome, even if they are not confounders, because they lower the variance of our estimates. However, we should **NOT** add controls that are just good predictors of the treatment, because they will increase the variance of our estimates.\n",
    "\n",
    "Here is a picture of what this situation looks like with causal graphs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"197pt\" height=\"260pt\"\n",
       " viewBox=\"0.00 0.00 197.10 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-256 193.1011,-256 193.1011,4 -4,4\"/>\n",
       "<!-- X -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>X</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"27\" cy=\"-234\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-229.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">X</text>\n",
       "</g>\n",
       "<!-- T -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>T</title>\n",
       "<ellipse fill=\"none\" stroke=\"#ffd700\" cx=\"27\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-157.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">T</text>\n",
       "</g>\n",
       "<!-- X&#45;&gt;T -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>X&#45;&gt;T</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M27,-215.8314C27,-208.131 27,-198.9743 27,-190.4166\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"30.5001,-190.4132 27,-180.4133 23.5001,-190.4133 30.5001,-190.4132\"/>\n",
       "</g>\n",
       "<!-- Y -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>Y</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Y</text>\n",
       "</g>\n",
       "<!-- T&#45;&gt;Y -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>T&#45;&gt;Y</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M27,-143.8314C27,-136.131 27,-126.9743 27,-118.4166\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"30.5001,-118.4132 27,-108.4133 23.5001,-118.4133 30.5001,-118.4132\"/>\n",
       "</g>\n",
       "<!-- treatment -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>treatment</title>\n",
       "<ellipse fill=\"none\" stroke=\"#ffd700\" cx=\"115\" cy=\"-90\" rx=\"43.4974\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"115\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">treatment</text>\n",
       "</g>\n",
       "<!-- days -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>days</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"150\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"150\" y=\"-13.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">days</text>\n",
       "</g>\n",
       "<!-- treatment&#45;&gt;days -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>treatment&#45;&gt;days</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M123.6517,-72.2022C127.7082,-63.8574 132.6256,-53.7417 137.1085,-44.5197\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"140.3444,-45.8685 141.5686,-35.3446 134.0488,-42.8081 140.3444,-45.8685\"/>\n",
       "</g>\n",
       "<!-- severity -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>severity</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"151\" cy=\"-234\" rx=\"38.2024\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"151\" y=\"-229.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">severity</text>\n",
       "</g>\n",
       "<!-- hospital -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>hospital</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"117\" cy=\"-162\" rx=\"38.2197\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"117\" y=\"-157.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">hospital</text>\n",
       "</g>\n",
       "<!-- severity&#45;&gt;hospital -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>severity&#45;&gt;hospital</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M142.5955,-216.2022C138.6841,-207.9192 133.9487,-197.8915 129.62,-188.7248\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"132.7428,-187.141 125.3078,-179.593 126.4131,-190.1301 132.7428,-187.141\"/>\n",
       "</g>\n",
       "<!-- severity&#45;&gt;days -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>severity&#45;&gt;days</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M156.2179,-216.1679C159.0406,-205.7239 162.2906,-192.2239 164,-180 170.6504,-132.4442 174.2943,-119.4613 167,-72 165.6414,-63.1598 163.1005,-53.7811 160.3897,-45.3637\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"163.6214,-43.9979 157.0667,-35.674 157,-46.2687 163.6214,-43.9979\"/>\n",
       "</g>\n",
       "<!-- hospital&#45;&gt;treatment -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>hospital&#45;&gt;treatment</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M116.4953,-143.8314C116.2814,-136.131 116.0271,-126.9743 115.7894,-118.4166\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"119.2879,-118.3122 115.5115,-108.4133 112.2906,-118.5066 119.2879,-118.3122\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.dot.Digraph at 0x1a1e787ac8>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = gr.Digraph()\n",
    "\n",
    "g.edge(\"X\", \"T\"), g.edge(\"T\", \"Y\")\n",
    "g.node(\"T\", color=\"gold\")\n",
    "\n",
    "g.node(\"treatment\", color=\"gold\")\n",
    "g.edge(\"severity\", \"hospital\")\n",
    "g.edge(\"severity\", \"days\")\n",
    "g.edge(\"hospital\", \"treatment\")\n",
    "g.edge(\"treatment\", \"days\")\n",
    "\n",
    "g"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bad Controls - Selection Bias\n",
    "\n",
    "Let's go back to the collections email example. Remember that the email was randomly assigned to customers. We've already explained what `credit_limit` and `risk_score` is. Now, let's look at the remaining variables. `opened` is a dummy variable for the customer opening the email or not. `agreement` is another dummy marking if the customers contacted the collections department to negotiate their debt, after having received the email. Which of the following models do you think is more appropriate? The first is a model with the treatment variable plus `credit_limit` and `risk_score`; the second adds `opened` and `agreement` dummies."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "        <td></td>          <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th>    <td>  490.8653</td> <td>    9.715</td> <td>   50.527</td> <td> 0.000</td> <td>  471.820</td> <td>  509.911</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>email</th>        <td>    4.4304</td> <td>    2.130</td> <td>    2.080</td> <td> 0.038</td> <td>    0.255</td> <td>    8.606</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>credit_limit</th> <td>    0.1511</td> <td>    0.008</td> <td>   18.833</td> <td> 0.000</td> <td>    0.135</td> <td>    0.167</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>risk_score</th>   <td>   -8.0516</td> <td>   38.424</td> <td>   -0.210</td> <td> 0.834</td> <td>  -83.379</td> <td>   67.276</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "email_1 = smf.ols('payments ~ email + credit_limit + risk_score', data=data).fit()\n",
    "email_1.summary().tables[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "        <td></td>          <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Intercept</th>    <td>  488.4416</td> <td>    9.716</td> <td>   50.272</td> <td> 0.000</td> <td>  469.394</td> <td>  507.489</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>email</th>        <td>   -1.6095</td> <td>    2.724</td> <td>   -0.591</td> <td> 0.555</td> <td>   -6.949</td> <td>    3.730</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>credit_limit</th> <td>    0.1507</td> <td>    0.008</td> <td>   18.809</td> <td> 0.000</td> <td>    0.135</td> <td>    0.166</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>risk_score</th>   <td>   -2.0929</td> <td>   38.375</td> <td>   -0.055</td> <td> 0.957</td> <td>  -77.325</td> <td>   73.139</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>opened</th>       <td>    3.9808</td> <td>    3.914</td> <td>    1.017</td> <td> 0.309</td> <td>   -3.692</td> <td>   11.654</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>agreement</th>    <td>   11.7093</td> <td>    4.166</td> <td>    2.811</td> <td> 0.005</td> <td>    3.542</td> <td>   19.876</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.table.SimpleTable'>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "email_2 = smf.ols('payments ~ email + credit_limit + risk_score + opened + agreement', data=data).fit()\n",
    "email_2.summary().tables[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "While the first model finds statistically significant results for the email, the second one does not. But maybe the second one is the right model and there's no effect for the email. After all, this model controls for more factors, so it should be more robust right? By now you probably know that this is not the case. What is left is to figure out what is.\n",
    "\n",
    "We know that we MUST add confounder variables. Variables that cause both the treatment and the outcome. We also know that it is a good idea to add controls that predict the outcome very well. This is not required, but it's nice to have. We also know that it is a bad idea to add control that predicts only the treatment. Again, this is not a deadly sin, but is nice to avoid. So what kind of controls are `opened` and `agreement`? Turns out, they are neither of the above.\n",
    "\n",
    "If you think about it, `opened` and `agreement` are surely correlated with the email, after all, you can't open the email if you didn't receive it and we've also said that the agreement only considers renegotiation that happened after the email has been sent. But **they don't cause email! Instead, they are caused by it!** \n",
    "\n",
    "Whenever I need to understand what kind of variables I'm dealing with, I always like to think about their causal graph. Let's do these here"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"300pt\" height=\"260pt\"\n",
       " viewBox=\"0.00 0.00 300.20 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-256 296.2021,-256 296.2021,4 -4,4\"/>\n",
       "<!-- email -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>email</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"29.7499\" cy=\"-234\" rx=\"30.0018\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"29.7499\" y=\"-229.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">email</text>\n",
       "</g>\n",
       "<!-- payments -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>payments</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"168.7499\" cy=\"-18\" rx=\"43.9992\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"168.7499\" y=\"-13.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">payments</text>\n",
       "</g>\n",
       "<!-- email&#45;&gt;payments -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>email&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M24.9783,-216.2188C17.4917,-184.1342 6.8185,-115.8277 37.7499,-72 55.8942,-46.2907 88.6138,-32.7915 116.8126,-25.7192\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"117.6057,-29.1283 126.567,-23.4762 116.0369,-22.3063 117.6057,-29.1283\"/>\n",
       "</g>\n",
       "<!-- opened -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>opened</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"131.7499\" cy=\"-162\" rx=\"35.7887\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"131.7499\" y=\"-157.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">opened</text>\n",
       "</g>\n",
       "<!-- email&#45;&gt;opened -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>email&#45;&gt;opened</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M49.4165,-220.1177C64.4029,-209.539 85.2829,-194.8002 102.2654,-182.8125\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"104.5878,-185.4574 110.7391,-176.8311 100.551,-179.7386 104.5878,-185.4574\"/>\n",
       "</g>\n",
       "<!-- agreement -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>agreement</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"93.7499\" cy=\"-90\" rx=\"46.8632\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"93.7499\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">agreement</text>\n",
       "</g>\n",
       "<!-- email&#45;&gt;agreement -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>email&#45;&gt;agreement</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M37.5975,-216.3428C48.6333,-191.5122 68.8316,-146.066 81.7571,-116.9836\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"84.9749,-118.3613 85.838,-107.8017 78.5782,-115.5183 84.9749,-118.3613\"/>\n",
       "</g>\n",
       "<!-- opened&#45;&gt;payments -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>opened&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M138.266,-144.1559C141.9381,-133.7079 146.4381,-120.2079 149.7499,-108 155.3159,-87.4823 160.231,-63.966 163.667,-46.1181\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"167.1475,-46.5485 165.5603,-36.0732 160.2686,-45.2519 167.1475,-46.5485\"/>\n",
       "</g>\n",
       "<!-- opened&#45;&gt;agreement -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>opened&#45;&gt;agreement</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M122.5511,-144.5708C118.1361,-136.2055 112.7488,-125.998 107.833,-116.6839\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"110.8909,-114.9791 103.1279,-107.7689 104.7002,-118.2464 110.8909,-114.9791\"/>\n",
       "</g>\n",
       "<!-- agreement&#45;&gt;payments -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>agreement&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M111.5238,-72.937C121.214,-63.6344 133.361,-51.9733 143.968,-41.7906\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"146.5722,-44.1424 151.3622,-34.6921 141.7244,-39.0926 146.5722,-44.1424\"/>\n",
       "</g>\n",
       "<!-- credit_limit -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>credit_limit</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"129.7499\" cy=\"-234\" rx=\"51.2329\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"129.7499\" y=\"-229.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">credit_limit</text>\n",
       "</g>\n",
       "<!-- credit_limit&#45;&gt;payments -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>credit_limit&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M150.0426,-217.2474C160.1523,-207.5544 171.3482,-194.4339 176.7499,-180 193.4038,-135.4987 184.6278,-79.2799 176.7098,-46.1244\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"180.0484,-45.0501 174.2025,-36.214 173.2622,-46.7671 180.0484,-45.0501\"/>\n",
       "</g>\n",
       "<!-- credit_limit&#45;&gt;opened -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>credit_limit&#45;&gt;opened</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M130.2545,-215.8314C130.4684,-208.131 130.7228,-198.9743 130.9605,-190.4166\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"134.4593,-190.5066 131.2384,-180.4133 127.462,-190.3122 134.4593,-190.5066\"/>\n",
       "</g>\n",
       "<!-- credit_limit&#45;&gt;agreement -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>credit_limit&#45;&gt;agreement</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M111.1531,-216.9238C101.8947,-207.1361 91.6529,-194.0283 86.7499,-180 79.7906,-160.0886 82.0834,-136.2381 85.8236,-118.0937\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"89.2816,-118.6752 88.134,-108.1427 82.463,-117.092 89.2816,-118.6752\"/>\n",
       "</g>\n",
       "<!-- risk_score -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>risk_score</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"245.7499\" cy=\"-234\" rx=\"46.4046\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"245.7499\" y=\"-229.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">risk_score</text>\n",
       "</g>\n",
       "<!-- risk_score&#45;&gt;payments -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>risk_score&#45;&gt;payments</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M241.937,-216.0548C235.1808,-185.6909 219.8095,-122.5512 198.7499,-72 194.873,-62.6941 189.7984,-52.9416 184.9284,-44.3251\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"187.8453,-42.3788 179.7905,-35.4961 181.7952,-45.8996 187.8453,-42.3788\"/>\n",
       "</g>\n",
       "<!-- risk_score&#45;&gt;opened -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>risk_score&#45;&gt;opened</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M221.294,-218.5542C204.202,-207.7593 181.2389,-193.2563 162.8463,-181.6398\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"164.5539,-178.5788 154.23,-176.198 160.816,-184.4972 164.5539,-178.5788\"/>\n",
       "</g>\n",
       "<!-- risk_score&#45;&gt;agreement -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>risk_score&#45;&gt;agreement</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M234.8299,-216.3332C222.3637,-197.0758 200.5913,-166.0666 176.7499,-144 162.723,-131.0173 145.2248,-119.1262 129.9162,-109.8272\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"131.5861,-106.7485 121.1986,-104.663 128.0184,-112.7711 131.5861,-106.7485\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.dot.Digraph at 0x1a1f159198>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = gr.Digraph()\n",
    "\n",
    "g.edge(\"email\", \"payments\")\n",
    "g.edge(\"email\", \"opened\")\n",
    "g.edge(\"email\", \"agreement\")\n",
    "g.edge(\"opened\", \"payments\")\n",
    "g.edge(\"opened\", \"agreement\")\n",
    "g.edge(\"agreement\", \"payments\")\n",
    "\n",
    "g.edge(\"credit_limit\", \"payments\")\n",
    "g.edge(\"credit_limit\", \"opened\")\n",
    "g.edge(\"credit_limit\", \"agreement\")\n",
    "g.edge(\"risk_score\", \"payments\")\n",
    "g.edge(\"risk_score\", \"opened\")\n",
    "g.edge(\"risk_score\", \"agreement\")\n",
    "\n",
    "g"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We know nothing causes email, because it's random by design. And we know (or at least we have strong reasons to believe) that credit limit and risk cause payments. We also think that email causes payments. As for `opened`, we think that it does cause payments. Intuitively, people that opened the collection email are more willing to negotiate and pay their debt. We also think that `opened` causes agreements for the same reasons as it causes payments. Moreover, we know `opened` is caused by email and we have reasons to believe people with different risk and credit limits have different open rates for the emails, so credit limit and risk also causes opened. As for agreement, we also think that it is caused by `opened`. If we think about the payments response variable, we can think of is as the result of a funnel:\n",
    "\n",
    "$\n",
    "email -> opened -> agreement -> payment \n",
    "$\n",
    "\n",
    "We also think that different levels of risk and line have different propensity of doing an agreement, so we will mark them also causing agreement. As for email and agreement, we could make an argument that some people just read the subject of the email and that makes them more likely to make an agreement. The point is that email could also cause agreement without passing through open.\n",
    "\n",
    "What we notice with this graph is that opened and agreement are both in the causal path from email to payments. So, if we control for them with regression, we would be saying \"this is the effect of email while keeping `opened` and `agreement` fixed\". However, both are part of the causal effect of the email, so we don't want to hold them fixed. Instead, we could argue that email increases payments precisely because it boosts the agreement rate. If we fix those variables, we are removing some of the true effect from the email variable. \n",
    "\n",
    "With potential outcome notation, we can say that, due to randomization \\\\(E[Y_0|T=0] = E[Y_0|T=1]\\\\). However, even with randomization, when we control for agreement, treatment and control are no longer comparable. In fact, with some intuitive thinking, we can even guess how they are different:\n",
    "\n",
    "\n",
    "$\n",
    "E[Y_0|T=0, Agreement=0] > E[Y_0|T=1, Agreement=0]\n",
    "$\n",
    "\n",
    "$\n",
    "E[Y_0|T=0, Agreement=1] > E[Y_0|T=1, Agreement=1]\n",
    "$\n",
    "\n",
    "The first equation makes it explicit that we think those without the email and the agreement are better than those with the email and without the agreement. That is because, if the treatment has a positive effect, those that didn't make and agreement **even with after having received the email** are probably worse in terms of payments compared to those that also didn't do the agreement but also didn't get the extra incentive of the email. As for the second equation, those that did the agreement even without having received the treatment are probably better than those that did the agreement but had the extra incentive of the email. \n",
    "\n",
    "This might be very confusing the first time you read it (it was for me), but make sure you understand it. Read it again if necessary. Then, a similar kind of reasoning can be done with the opened variable. Try to make it yourself.\n",
    "\n",
    "This sort of bias is so pervasive it has its own name. While confounding is the bias from failing to control for a common cause, **selection bias is when we control for a common effect or a variable in between the path from cause to effect.** As a rule of thumb, always include confounders and variables that are good predictors of \\\\(Y\\\\) in your model. Always exclude variables that are good predictors of only \\\\(T\\\\), mediators between the treatment and outcome or common effect of the treatment and outcome.\n",
    "\n",
    "![img](./data/img/beyond-conf/selection.png)\n",
    "\n",
    "Selection bias is so pervasive that not even randomization can fix it. Better yet, it is often introduced by the ill advised, even in random data! Spotting and avoiding selection bias requires more practice than skill. Often, they appear underneath some supposedly clever idea, making it even harder to uncover. Here are some examples of selection biased I've encountered:\n",
    "\n",
    "    1. Adding a dummy for paying the entire debt when trying to estimate the effect of a collections strategy on payments.\n",
    "    2. Controlling for white vs blue collar jobs when trying to estimate the effect of schooling on earnings\n",
    "    3. Controlling for conversion when estimating the impact of interest rates on loan duration\n",
    "    4. Controlling for marital happiness when estimating the impact of children on extramarital affairs\n",
    "    5. Breaking up payments modeling E[Payments] into one binary model that predict if payment will happen and another model that predict how much payment will happen given that some will: E[Payments|Payments>0]*P(Payments>0)\n",
    "    \n",
    "What is notable about all these ideas is how reasonable they sound. Selection bias often does. Let this be a warning. As a matter of fact, I myself have fallen into the traps above many many times before I learned how bad they were. One in particular, the last one, deserves further explanation because it looks so clever and catches lots of data scientists off guard. It's so pervasive that it has its own name: **The Bad COP**!\n",
    "\n",
    "### Bad COP\n",
    "\n",
    "The situation goes like this. You have a continuous variable that you want to predict but its distribution is over represented at zero. For instance, if you want to model consumer spending, you will have something like a gamma distribution, but with lots of zeros."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(np.concatenate([\n",
    "    np.random.gamma(5, 50, 1000), \n",
    "    np.zeros(700)\n",
    "]), bins=20)\n",
    "plt.xlabel(\"Customer Spend\")\n",
    "plt.title(\"Distribution Customer Spend\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When a data scientist sees this, the first idea that pops into his head is to break up modeling into 2 steps. The first is the participation, that is, the probability that \\\\(Y > 0\\\\). In our spend example, this would be modeling if the customer decided to spend or not. The second part models \\\\(Y\\\\) for those that decided to participate. It is the Conditional-on-Positives effect. In our case, this would be how much the customer spends after he or she decided they would spend anything. If we would like to estimate the effect of the treatment \\\\(T\\\\) on expenditures, it would look something like this under the two model approach\n",
    "\n",
    "$\n",
    "E[Y_i|T_i] = E[Y_i|Y_i>0, T_i]P(Y_i>0|T_i)\n",
    "$\n",
    "\n",
    "\n",
    "There is nothing wrong with the participation model \\\\(P(Y_i>0|T_i)\\\\). In fact, if \\\\(T\\\\) is randomly assigned, it will capture the increase in probability of spending due to the treatment. The issue is with the COP part. **It will be biased even under random assignment**:\n",
    "\n",
    "\\begin{align*} \n",
    "E[Y_i|Y_i>0, T_i]&=E[Y_i|Y_i>0, T_i=1]-E[Y_i|Y_i>0, T_i=0] \\\\\n",
    "&=E[Y_{i1}|Y_{i1}>0]-E[Y_{i0}|Y_{i0}>0] \\\\\n",
    "&=\\underbrace{E[Y_{i1} - Y_{i0}|Y_{i1}>0]}_{Causal \\ Effect} + \\underbrace{\\{ E[Y_{i0}|Y_{i1}>0] - E[Y_{i0}|Y_{i0}>0] \\}}_{Selection \\ Bias}\n",
    "\\end{align*} \n",
    "\n",
    "When we break up the COP effect, we get first the causal effect on the participant subpopulation. In our example, this would be the causal effect on those that decide to spend something. Second, we get a bias term which is the difference in \\\\(Y_0\\\\) for those that decide to participate when assigned to the treatment (\\\\(E[Y_{i0}|Y_{i1}>0]\\\\)) and those that that participate even without the treatment (\\\\(E[Y_{i0}|Y_{i0}>0]\\\\)). In our case, this bias is probably negative, since those that spend when assigned to the treatment, have they not gottend the treatment, would probably spend less than those that spend even without the treatment \\\\(E[Y_{i0}|Y_{i1}>0] < E[Y_{i0}|Y_{i0}>0]\\\\).\n",
    "\n",
    "![img](./data/img/beyond-conf/cop.png)\n",
    "\n",
    "To wrap up selection bias, we need to always remind ourselves to never control for a variable that is either in between the treatment and the outcome or is a common effect of the outcome and the treated. In graphical language, here is what bad control looks like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"89pt\" height=\"260pt\"\n",
       " viewBox=\"0.00 0.00 89.00 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-256 85,-256 85,4 -4,4\"/>\n",
       "<!-- T -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>T</title>\n",
       "<ellipse fill=\"none\" stroke=\"#ffd700\" cx=\"54\" cy=\"-234\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"54\" y=\"-229.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">T</text>\n",
       "</g>\n",
       "<!-- X_1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>X_1</title>\n",
       "<ellipse fill=\"none\" stroke=\"#ff0000\" cx=\"27\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-157.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">X_1</text>\n",
       "</g>\n",
       "<!-- T&#45;&gt;X_1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>T&#45;&gt;X_1</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M47.3258,-216.2022C44.2524,-208.0064 40.5384,-198.1024 37.1305,-189.0145\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"40.3858,-187.7274 33.5974,-179.593 33.8315,-190.1853 40.3858,-187.7274\"/>\n",
       "</g>\n",
       "<!-- X_2 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>X_2</title>\n",
       "<ellipse fill=\"none\" stroke=\"#ff0000\" cx=\"54\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"54\" y=\"-13.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">X_2</text>\n",
       "</g>\n",
       "<!-- T&#45;&gt;X_2 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>T&#45;&gt;X_2</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M57.7474,-216.0931C59.7466,-205.6241 61.9966,-192.1241 63,-180 66.9591,-132.1636 66.9591,-119.8364 63,-72 62.2945,-63.4753 60.9727,-54.2703 59.5551,-45.917\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.9689,-45.1258 57.7474,-35.9069 56.0803,-46.3698 62.9689,-45.1258\"/>\n",
       "</g>\n",
       "<!-- Y -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>Y</title>\n",
       "<ellipse fill=\"none\" stroke=\"#000000\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-85.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Y</text>\n",
       "</g>\n",
       "<!-- X_1&#45;&gt;Y -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>X_1&#45;&gt;Y</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M27,-143.8314C27,-136.131 27,-126.9743 27,-118.4166\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"30.5001,-118.4132 27,-108.4133 23.5001,-118.4133 30.5001,-118.4132\"/>\n",
       "</g>\n",
       "<!-- Y&#45;&gt;X_2 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>Y&#45;&gt;X_2</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M33.6742,-72.2022C36.7476,-64.0064 40.4616,-54.1024 43.8695,-45.0145\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"47.1685,-46.1853 47.4026,-35.593 40.6142,-43.7274 47.1685,-46.1853\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.dot.Digraph at 0x1a210d1cc0>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = gr.Digraph()\n",
    "\n",
    "g.edge(\"T\", \"X_1\"), g.node(\"T\", color=\"gold\"), g.edge(\"X_1\", \"Y\"), g.node(\"X_1\", color=\"red\")\n",
    "g.edge(\"T\", \"X_2\"), g.edge(\"Y\", \"X_2\"), g.node(\"X_2\", color=\"red\")\n",
    "\n",
    "g"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Key Ideas\n",
    "\n",
    "In this section, we've looked at variables that are not confounders and if we should add them or not to our model for causal identification. We've seen that variables that are good predictors of the outcome \\\\(y\\\\) should be added to the model even if they don't predict \\\\(T\\\\) (are not confounders). This is because predicting \\\\(Y\\\\) lowers its variance and makes it more likely that we will see statistically significant results when estimating the causal effect. Next, we've seen that it is a bad idea to add variables that predict the treatment but not the outcome. Those variables reduce the variability of the treatment, making it harder for us to find the causal effect. Finally, we've looked at selection bias. This is bias that arises when we control for variables in the causal path from the treatment to the outcome or variables that are common effects of the treatment and the outcome.\n",
    "\n",
    "## References\n",
    "\n",
    "I like to think of this entire book as a tribute to Joshua Angrist, Alberto Abadie and Christopher Walters for their amazing Econometrics class. Most of the ideas here are taken from their classes at the American Economic Association. Watching them is what is keeping me sane during this tough year of 2020.\n",
    "* [Cross-Section Econometrics](https://www.aeaweb.org/conference/cont-ed/2017-webcasts)\n",
    "* [Mastering Mostly Harmless Econometrics](https://www.aeaweb.org/conference/cont-ed/2020-webcasts)\n",
    "\n",
    "I'll also like to reference the amazing books from Angrist. They have shown me that Econometrics, or 'Metrics as they call it, is not only extremely useful but also profoundly fun.\n",
    "\n",
    "* [Mostly Harmless Econometrics](https://www.mostlyharmlesseconometrics.com/)\n",
    "* [Mastering 'Metrics](https://www.masteringmetrics.com/)\n",
    "\n",
    "My final reference is Miguel Hernan and Jamie Robins' book. It has been my trustworthy companion in the most thorny causal questions I had to answer.\n",
    "\n",
    "* [Causal Inference Book](https://www.hsph.harvard.edu/miguel-hernan/causal-inference-book/)\n",
    "\n",
    "\n",
    "![img](./data/img/poetry.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
